## Status

- [x] Step 1-2: Prisma schema + migrations
- [x] Step 3: Repository token
- [x] Step 4: ComponentType domain model
- [x] Step 5: AttributeType domain model
- [x] Step 6: Variant domain model
- [x] Step 7: Repository interfaces
- [x] Step 8: Exceptions
- [x] Step 9: ComponentType use cases
- [x] Step 10: AttributeType use cases
- [x] Step 11: Variant use cases
- [x] Step 12: Infrastructure mappers
- [x] Step 13: Repository implementations
- [x] Step 14: Modify existing mappers
- [x] Step 15: DTOs
- [x] Step 16: Controllers
- [x] Step 17: Module wiring
- [x] Step 18: Export barrels

## Build result

`bun run build:app` — ✅ Exit code 0, no TypeScript errors

## Detect changes (gitnexus)

Risk level: **low** — 0 affected execution flows broken. All changes are purely additive.

## Files changed

### Database
- `prisma/providers/mysql/prisma-models/variant.prisma` (created)
- `prisma/providers/mysql/prisma-models/product.prisma` (modified — added `componentTypeId` to `Component`, `variants` relation to `ProductStructure` and `Product`)
- `prisma/providers/mysql/prisma-models/order.prisma` (modified — added `variantId` to `OrderItem`)
- `prisma/providers/mysql/migrations/20260526000001_add_variant_entities/migration.sql` (created)
- `prisma/providers/mysql/migrations/20260526000002_seed_attribute_types/migration.sql` (created)

### Domain
- `src/core/domain/repository/repository.token.ts` (modified — added 4 new tokens)
- `src/core/domain/model/component-type/component-type.interface.ts` (created)
- `src/core/domain/model/component-type/component-type.model.ts` (created)
- `src/core/domain/model/component-type/index.ts` (created)
- `src/core/domain/model/attribute-type/attribute-type.interface.ts` (created)
- `src/core/domain/model/attribute-type/attribute-type.model.ts` (created)
- `src/core/domain/model/attribute-type/index.ts` (created)
- `src/core/domain/model/variant/variant.interface.ts` (created)
- `src/core/domain/model/variant/variant.model.ts` (created)
- `src/core/domain/model/variant/index.ts` (created)
- `src/core/domain/model/component/component.interface.ts` (modified — added `componentTypeId`)
- `src/core/domain/model/component/component.model.ts` (modified — added `componentTypeId`)
- `src/core/domain/model/order-item/order-item.interface.ts` (modified — added `variantId`)
- `src/core/domain/model/order-item/order-item.model.ts` (modified — added `variantId`)
- `src/core/domain/model/index.ts` (modified — added exports)
- `src/core/domain/repository/component-type.repository.ts` (created)
- `src/core/domain/repository/attribute-type.repository.ts` (created)
- `src/core/domain/repository/variant.repository.ts` (created)
- `src/core/domain/repository/index.ts` (modified — added exports)
- `src/core/exception/component-type.exception.ts` (created)
- `src/core/exception/variant.exception.ts` (created)
- `src/core/exception/index.ts` (modified — added exports)

### Application
- `src/application/usecases/component-type/get-component-types.usecase.ts` (created)
- `src/application/usecases/component-type/get-component-type.usecase.ts` (created)
- `src/application/usecases/component-type/create-component-type.usecase.ts` (created)
- `src/application/usecases/component-type/update-component-type.usecase.ts` (created)
- `src/application/usecases/component-type/delete-component-type.usecase.ts` (created)
- `src/application/usecases/component-type/index.ts` (created)
- `src/application/usecases/attribute-type/get-attribute-types.usecase.ts` (created)
- `src/application/usecases/attribute-type/index.ts` (created)
- `src/application/usecases/variant/get-variants.usecase.ts` (created)
- `src/application/usecases/variant/get-variant.usecase.ts` (created)
- `src/application/usecases/variant/create-variant.usecase.ts` (created)
- `src/application/usecases/variant/update-variant.usecase.ts` (created)
- `src/application/usecases/variant/delete-variant.usecase.ts` (created)
- `src/application/usecases/variant/index.ts` (created)
- `src/application/usecases/index.ts` (modified — added exports)
- `src/application/application.module.ts` (modified — added providers)

### Infrastructure
- `src/infrastructure/database/mysql/mapper/component-type.mapper.ts` (created)
- `src/infrastructure/database/mysql/mapper/attribute-type.mapper.ts` (created)
- `src/infrastructure/database/mysql/mapper/variant.mapper.ts` (created)
- `src/infrastructure/database/mysql/mapper/component.mapper.ts` (modified — added componentTypeId)
- `src/infrastructure/database/mysql/mapper/order-item.mapper.ts` (modified — added variantId)
- `src/infrastructure/database/mysql/repository/component-type.repository.implement.ts` (created)
- `src/infrastructure/database/mysql/repository/attribute-type.repository.implement.ts` (created)
- `src/infrastructure/database/mysql/repository/variant.repository.implement.ts` (created)
- `src/infrastructure/providers/repository.provider.ts` (modified — added 3 repo providers)

### Presentation
- `src/presentation/ports/http/controllers/component-type/component-type.dto.ts` (created)
- `src/presentation/ports/http/controllers/component-type/admin-component-type.controller.ts` (created)
- `src/presentation/ports/http/controllers/attribute-type/attribute-type.dto.ts` (created)
- `src/presentation/ports/http/controllers/attribute-type/admin-attribute-type.controller.ts` (created)
- `src/presentation/ports/http/controllers/variant/variant.dto.ts` (created)
- `src/presentation/ports/http/controllers/variant/admin-variant.controller.ts` (created)
- `src/presentation/ports/http/controllers/index.ts` (modified — added exports)
- `src/presentation/ports/http/modules/admin.module.ts` (modified — added 3 controllers)
