package postgres import ( "context" "database/sql" "fmt" "git.aiterp.net/rpdata/api/database/postgres/psqlcore" "git.aiterp.net/rpdata/api/models" ) type tagRepository struct { db *sql.DB } func (r *tagRepository) Find(ctx context.Context, kind models.TagKind, name string) (*models.Tag, error) { tag, err := psqlcore.New(r.db).SelectTagsByTag(ctx, fmt.Sprintf("%s:%s", kind, nmae)) if err != nil { return nil, err } return &models.Tag{Kind: models.TagKind(tag.Kind), Name: tag.Name}, nil } func (r *tagRepository) List(ctx context.Context, filter models.TagFilter) ([]*models.Tag, error) { var tags []string var err error if filter.Kind != nil { tags, err = psqlcore.New(r.db).SelectDistinctTagsByKind(ctx, string(*filter.Kind)) } else { tags, err = psqlcore.New(r.db).SelectDistinctTags(ctx) } if err != nil { return nil, err } return models.DecodeTagArray(tags) } func modelsTagsFromDataTags(tags []psqlcore.CommonTag) []*models.Tag { results := make([]*models.Tag, len(tags)) for i, tag := range tags { results[i] = &models.Tag{Kind: models.TagKind(tag.Kind), Name: tag.Name} } return results }