refactor: remove company management APIs

This commit is contained in:
Frudrax Cheng
2026-06-05 18:00:14 +08:00
parent efdde0ab28
commit 698c22cd08
16 changed files with 1631 additions and 3738 deletions
+24 -18
View File
@@ -17,7 +17,7 @@ make test # Run all integration tests (./test
go test -v ./services/... # Run service layer unit tests
go test -v ./tests/... # Run integration tests
go test -v -run TestAuthService_ValidateUser_Success ./services/... # Single test
go test -v ./services/... -run TestSerialsService # Run test prefix
go test -v ./services/... -run TestEmployeeSerialsService # Run test prefix
make test-coverage # Generate coverage report
```
@@ -46,10 +46,11 @@ backend-go/
├── controllers/ # HTTP request handlers
│ ├── aftersales_controller.go # Aftersales orders: create, query, submit, confirm, qrcode
│ ├── auth_controller.go # Auth: login, profile, password change
│ ├── companies_controller.go # Company CRUD
│ ├── employees_controller.go # Employee serials: generate, query, update, revoke, qrcode
│ ├── dashboard_controller.go # Dashboard work-order statistics
│ ├── employees_controller.go # Employee permission codes: generate, query, update, revoke, qrcode
│ ├── helper.go # Helper functions (GetCurrentUser, BindJSON, Response)
│ ├── serials_controller.go # Company serials: generate, query, update, revoke, qrcode
│ ├── product_traces_controller.go # Product traceability
│ ├── project_orders_controller.go # Project work orders
│ └── users_controller.go # Employee master data / backend account management
├── database/ # Database connection and migrations
│ └── database.go # GORM init, AutoMigrate
@@ -59,17 +60,18 @@ backend-go/
├── middleware/ # Middleware
│ └── auth.go # JWT auth, Admin / Technician permission checks
├── models/ # Data models and DTOs
│ └── models.go # User, Company, Serial, EmployeeSerial, AftersalesOrder and DTOs
│ └── models.go # User, Company, EmployeeSerial, ProductTrace, AftersalesOrder, ProjectOrder and DTOs
├── routes/ # Route configuration
│ └── routes.go # API route registration
├── services/ # Business logic layer
│ ├── aftersales_service.go # Aftersales orders: create, list, update, submit, customer confirm, qrcode
│ ├── auth_service.go # Auth: validate user, generate token, password management
│ ├── companies_service.go # Company CRUD
│ ├── employees_service.go # Employee serials: generate, query, update, revoke, qrcode
│ ├── serials_service.go # Company serials: generate, query, update, revoke, qrcode
│ ├── dashboard_service.go # Dashboard work-order statistics
│ ├── employees_service.go # Employee permission codes: generate, query, update, revoke, qrcode
│ ├── product_traces_service.go # Product traceability
│ ├── project_orders_service.go # Project work orders
│ ├── aftersales_service_test.go # Aftersales unit tests
│ ├── services_test.go # Auth / Serials / Employees / Companies unit tests
│ ├── services_test.go # Auth / employee permission-code unit tests
│ ├── users_service.go # Employee CRUD, role management, password reset (admin)
│ └── users_service_test.go # Employee/user account unit tests
├── tests/ # Integration tests
@@ -90,12 +92,15 @@ backend-go/
### API Surface (Current)
- **Auth**: `POST /api/auth/login`, `POST /api/auth/logout`, `GET /api/auth/profile`, `PUT /api/auth/profile`, `POST /api/auth/change-password`
- **Serials**: `POST /api/serials/generate`, `POST /api/serials/generate-with-prefix`, `POST /api/serials/:serialNumber/qrcode`, `GET /api/serials/:serialNumber/query`, `GET /api/serials`, `PATCH /api/serials/:serialNumber`, `PUT /api/serials/:serialNumber`, `POST /api/serials/:serialNumber/revoke`
- **Companies**: `GET /api/companies/stats/overview`, `GET /api/companies`, `GET /api/companies/:companyName`, `POST /api/companies`, `PATCH /api/companies/:companyName`, `PUT /api/companies/:companyName`, `POST /api/companies/:companyName/revoke`, `DELETE /api/companies/:companyName/serials/:serialNumber`, `DELETE /api/companies/:companyName`
- **Employee Serials**: `POST /api/employee-serials/generate`, `POST /api/employee-serials/:serialNumber/qrcode`, `GET /api/employee-serials/:serialNumber/query`, `GET /api/employee-serials`, `PATCH /api/employee-serials/:serialNumber`, `PUT /api/employee-serials/:serialNumber`, `POST /api/employee-serials/:serialNumber/revoke`
- **Dashboard**: `GET /api/dashboard/stats`
- **Employee Permission Codes**: `POST /api/employee-serials/generate`, `POST /api/employee-serials/:serialNumber/qrcode`, `GET /api/employee-serials/:serialNumber/query`, `GET /api/employee-serials`, `PATCH /api/employee-serials/:serialNumber`, `PUT /api/employee-serials/:serialNumber`, `POST /api/employee-serials/:serialNumber/revoke`, `DELETE /api/employee-serials/:serialNumber`
- **Product Traces**: `GET /api/product-traces/:serialNumber/query`, `POST /api/product-traces`, `GET /api/product-traces`, `GET /api/product-traces/:serialNumber`, `PATCH /api/product-traces/:serialNumber`, `POST /api/product-traces/:serialNumber/qrcode`, `POST /api/product-traces/:serialNumber/wechat-qrcode`, `POST /api/product-traces/:serialNumber/revoke`, `DELETE /api/product-traces/:serialNumber`
- **Aftersales** (公开): `GET /api/aftersales/:serialNumber/query`, `POST /api/aftersales/:serialNumber/confirm`
- **Aftersales** (技术员+管理员): `POST /api/aftersales`, `GET /api/aftersales`, `GET /api/aftersales/:serialNumber`, `PATCH /api/aftersales/:serialNumber`, `POST /api/aftersales/:serialNumber/qrcode`, `POST /api/aftersales/:serialNumber/submit`
- **Aftersales** (仅管理员): `POST /api/aftersales/:serialNumber/reassign`, `POST /api/aftersales/:serialNumber/force-close`, `DELETE /api/aftersales/:serialNumber`
- **Project Orders** (公开): `GET /api/project-orders/:serialNumber/query`, `POST /api/project-orders/:serialNumber/site-images`, `POST /api/project-orders/:serialNumber/complete`
- **Project Orders** (技术员+管理员): `POST /api/project-orders`, `GET /api/project-orders`, `GET /api/project-orders/:serialNumber`, `PATCH /api/project-orders/:serialNumber`, `POST /api/project-orders/:serialNumber/qrcode`, `POST /api/project-orders/:serialNumber/submit`
- **Project Orders** (仅管理员): `POST /api/project-orders/:serialNumber/reassign`, `POST /api/project-orders/:serialNumber/force-close`, `DELETE /api/project-orders/:serialNumber`
- **Users** (技术员+管理员): `GET /api/users/assignable`
- **Employees** (仅管理员): `POST /api/employees`, `GET /api/employees`, `PATCH /api/employees/:id`, `POST /api/employees/:id/reset-password`, `DELETE /api/employees/:id`
@@ -104,12 +109,13 @@ backend-go/
- `admin` has full backend access.
- `technician` only has aftersales/work-order module access.
- `employee` has no backend login access and does not require a password.
- Creating an employee through `/api/employees` creates employee master data and automatically generates one employee serial bound by `employeeId`.
- Creating an employee through `/api/employees` creates employee master data and automatically generates one employee permission code bound by `employeeId`.
- `admin` / `technician` creation requires an initial password; `employee` creation must not require one.
### Business Boundaries
- Company management (`Company`, `/api/companies`) is for authorized agents/company-code verification.
- Aftersales order `companyName` is customer information stored on the order only; creating or updating an aftersales order must not create or link a `Company` record.
- Enterprise/company-code management was removed. Do not reintroduce `/api/companies`, `/api/serials`, `CompaniesService`, `SerialsService`, or a company-management UI.
- The `Company` model remains only as internal compatibility for employee permission-code ownership; it is not an exposed management feature.
- Aftersales/project order `companyName` is customer information stored on the order only; creating or updating a work order must not create a managed-company feature.
### Import Organization
Standard imports followed by third-party imports, then project imports (sorted alphabetically):
@@ -127,9 +133,9 @@ import (
```
### Naming Conventions
- **Controllers**: `AuthController`, `SerialsController`, `CompaniesController`, `EmployeeSerialsController`
- **Services**: `AuthService`, `SerialsService`, `CompaniesService`, `EmployeeSerialsService`
- **Models**: `User`, `Company`, `Serial` (use PascalCase for exported structs)
- **Controllers**: `AuthController`, `DashboardController`, `EmployeeSerialsController`, `ProductTracesController`, `ProjectOrdersController`
- **Services**: `AuthService`, `DashboardService`, `EmployeeSerialsService`, `ProductTracesService`, `ProjectOrdersService`
- **Models**: `User`, `Company`, `EmployeeSerial`, `ProductTrace`, `AftersalesOrder`, `ProjectOrder` (use PascalCase for exported structs)
- **DTOs**: `LoginDTO`, `ChangePasswordDTO`, `UpdateProfileDTO` (DTO suffix)
- **Functions**: `ValidateUser`, `Generate`, `Query` (PascalCase for exported)
- **Variables**: camelCase for local variables, PascalCase for exported