fix: avoid company writes for employee serials
This commit is contained in:
@@ -79,20 +79,6 @@ func (s *EmployeeSerialsService) generateWithDB(
|
|||||||
) ([]models.EmployeeSerial, error) {
|
) ([]models.EmployeeSerial, error) {
|
||||||
var serials []models.EmployeeSerial
|
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 == "" {
|
if serialPrefix == "" {
|
||||||
serialPrefix = fmt.Sprintf("EMP%d", time.Now().Year()%100)
|
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 {
|
if result.Error != nil {
|
||||||
return nil, fmt.Errorf("保存员工序列号失败: %w", result.Error)
|
return nil, fmt.Errorf("保存员工序列号失败: %w", result.Error)
|
||||||
}
|
}
|
||||||
@@ -197,17 +183,6 @@ func (s *EmployeeSerialsService) Update(serialNumber string, updateData models.U
|
|||||||
}
|
}
|
||||||
|
|
||||||
if updateData.CompanyName != "" {
|
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
|
serial.CompanyName = updateData.CompanyName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ func TestEmployeeSerialsService_Generate_Success(t *testing.T) {
|
|||||||
database.DB.Unscoped().Delete(&user)
|
database.DB.Unscoped().Delete(&user)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) {
|
func TestEmployeeSerialsService_Generate_DoesNotCreateManagedCompany(t *testing.T) {
|
||||||
var user models.User
|
var user models.User
|
||||||
password, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost)
|
password, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost)
|
||||||
user = models.User{
|
user = models.User{
|
||||||
@@ -266,11 +266,9 @@ func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, serials, 3)
|
assert.Len(t, serials, 3)
|
||||||
|
|
||||||
var company models.Company
|
var count int64
|
||||||
result := database.DB.Where("company_name = ?", "NewEmpCompany").First(&company)
|
database.DB.Model(&models.Company{}).Where("company_name = ?", "NewEmpCompany").Count(&count)
|
||||||
assert.NoError(t, result.Error)
|
assert.Equal(t, int64(0), count)
|
||||||
assert.Equal(t, "NewEmpCompany", company.CompanyName)
|
|
||||||
assert.True(t, company.IsActive)
|
|
||||||
|
|
||||||
for _, serial := range serials {
|
for _, serial := range serials {
|
||||||
database.DB.Unscoped().Delete(&serial)
|
database.DB.Unscoped().Delete(&serial)
|
||||||
@@ -419,6 +417,10 @@ func TestEmployeeSerialsService_Update_Success(t *testing.T) {
|
|||||||
assert.Equal(t, "新名字", result.EmployeeName)
|
assert.Equal(t, "新名字", result.EmployeeName)
|
||||||
assert.False(t, result.IsActive)
|
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 {
|
for _, serial := range serials {
|
||||||
database.DB.Unscoped().Delete(&serial)
|
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{})
|
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) {
|
func TestUsersService_Create_BlocksEmployeeRole(t *testing.T) {
|
||||||
svc := UsersService{}
|
svc := UsersService{}
|
||||||
_, err := svc.Create(models.CreateUserDTO{
|
_, err := svc.Create(models.CreateUserDTO{
|
||||||
|
|||||||
Reference in New Issue
Block a user