package skill import ( "context" "errors" "github.com/google/uuid" "go.uber.org/fx" "gorm.io/gorm" domainSkill "base/internal/domain/skill" ) type repository struct { db *gorm.DB } // NewRepository creates a Repository for the skills catalog. func NewRepository(lc fx.Lifecycle, db *gorm.DB) domainSkill.Repository { lc.Append( fx.Hook{ OnStart: func(ctx context.Context) error { return nil }, OnStop: func(ctx context.Context) error { return nil }, }) return &repository{db: db} } func (r *repository) FindAll(ctx context.Context) ([]*domainSkill.Skill, error) { var models []SkillModel if err := r.db.WithContext(ctx).Order("name ASC").Find(&models).Error; err != nil { return nil, err } out := make([]*domainSkill.Skill, len(models)) for i := range models { out[i] = &domainSkill.Skill{ID: models[i].ID, Name: models[i].Name} } return out, nil } func (r *repository) FindByID(ctx context.Context, id uuid.UUID) (*domainSkill.Skill, error) { var model SkillModel if err := r.db.WithContext(ctx).Where("id = ?", id).First(&model).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &domainSkill.Skill{ID: model.ID, Name: model.Name}, nil }