feat: mapper.

This commit is contained in:
Bobo
2025-06-11 23:03:10 +08:00
parent 41c8b6d9dd
commit f48c7373d7
7 changed files with 274 additions and 0 deletions

51
mapper/mapper.go Normal file
View File

@@ -0,0 +1,51 @@
package mapper
import (
"github.com/jinzhu/copier"
)
type CopierMapper[DTO any, MODEL any] struct {
copierOption copier.Option
}
func NewCopierMapper[DTO any, MODEL any]() *CopierMapper[DTO, MODEL] {
return &CopierMapper[DTO, MODEL]{
copierOption: copier.Option{
Converters: []copier.TypeConverter{},
},
}
}
func (m *CopierMapper[DTO, MODEL]) AppendConverter(converter copier.TypeConverter) {
m.copierOption.Converters = append(m.copierOption.Converters, converter)
}
func (m *CopierMapper[DTO, MODEL]) AppendConverters(converters []copier.TypeConverter) {
m.copierOption.Converters = append(m.copierOption.Converters, converters...)
}
func (m *CopierMapper[DTO, MODEL]) ToModel(dto *DTO) *MODEL {
if dto == nil {
return nil
}
var model MODEL
if err := copier.CopyWithOption(&model, dto, m.copierOption); err != nil {
panic(err) // Handle error appropriately in production code
}
return &model
}
func (m *CopierMapper[DTO, MODEL]) ToDto(model *MODEL) *DTO {
if model == nil {
return nil
}
var dto DTO
if err := copier.CopyWithOption(&dto, model, m.copierOption); err != nil {
panic(err) // Handle error appropriately in production code
}
return &dto
}