github.com/nais/knorten@v0.0.0-20240104110906-55926958e361/pkg/database/teams.go (about)

     1  package database
     2  
     3  import (
     4  	"context"
     5  	"database/sql"
     6  	"errors"
     7  	"strings"
     8  
     9  	"github.com/nais/knorten/pkg/database/gensql"
    10  	"github.com/nais/knorten/pkg/reflect"
    11  )
    12  
    13  func (r *Repo) TeamCreate(ctx context.Context, team gensql.Team) error {
    14  	return r.querier.TeamCreate(ctx, gensql.TeamCreateParams{
    15  		ID:              team.ID,
    16  		Users:           stringSliceToLower(team.Users),
    17  		Slug:            team.Slug,
    18  		EnableAllowlist: team.EnableAllowlist,
    19  	})
    20  }
    21  
    22  func (r *Repo) TeamUpdate(ctx context.Context, team gensql.Team) error {
    23  	return r.querier.TeamUpdate(ctx, gensql.TeamUpdateParams{
    24  		ID:              team.ID,
    25  		Users:           stringSliceToLower(team.Users),
    26  		EnableAllowlist: team.EnableAllowlist,
    27  	})
    28  }
    29  
    30  func (r *Repo) TeamGet(ctx context.Context, teamID string) (gensql.TeamGetRow, error) {
    31  	return r.querier.TeamGet(ctx, teamID)
    32  }
    33  
    34  func (r *Repo) TeamBySlugGet(ctx context.Context, slug string) (gensql.TeamBySlugGetRow, error) {
    35  	return r.querier.TeamBySlugGet(ctx, slug)
    36  }
    37  
    38  func (r *Repo) TeamDelete(ctx context.Context, teamID string) error {
    39  	return r.querier.TeamDelete(ctx, teamID)
    40  }
    41  
    42  func (r *Repo) TeamsGet(ctx context.Context) ([]gensql.Team, error) {
    43  	return r.querier.TeamsGet(ctx)
    44  }
    45  
    46  func (r *Repo) TeamsForChartGet(ctx context.Context, chartType gensql.ChartType) ([]string, error) {
    47  	return r.querier.TeamsForChartGet(ctx, chartType)
    48  }
    49  
    50  func (r *Repo) TeamsForUser(ctx context.Context, email string) ([]string, error) {
    51  	teams, err := r.querier.TeamsForUserGet(ctx, email)
    52  	if err != nil {
    53  		if errors.Is(err, sql.ErrNoRows) {
    54  			return []string{}, nil
    55  		}
    56  		return nil, err
    57  	}
    58  
    59  	var teamList []string
    60  	for _, t := range teams {
    61  		teamList = append(teamList, t.ID)
    62  	}
    63  
    64  	return teamList, nil
    65  }
    66  
    67  func (r *Repo) TeamChartValueInsert(ctx context.Context, key, value, teamID string, chartType gensql.ChartType) error {
    68  	return r.querier.TeamValueInsert(ctx, gensql.TeamValueInsertParams{
    69  		Key:       key,
    70  		Value:     value,
    71  		TeamID:    teamID,
    72  		ChartType: chartType,
    73  	})
    74  }
    75  
    76  func (r *Repo) TeamValuesGet(ctx context.Context, chartType gensql.ChartType, teamID string) ([]gensql.ChartTeamValue, error) {
    77  	return r.querier.TeamValuesGet(ctx, gensql.TeamValuesGetParams{
    78  		ChartType: chartType,
    79  		TeamID:    teamID,
    80  	})
    81  }
    82  
    83  func (r *Repo) TeamValueGet(ctx context.Context, key, teamID string) (gensql.ChartTeamValue, error) {
    84  	return r.querier.TeamValueGet(ctx, gensql.TeamValueGetParams{
    85  		Key:    key,
    86  		TeamID: teamID,
    87  	})
    88  }
    89  
    90  func (r *Repo) TeamValueDelete(ctx context.Context, key, teamID string) error {
    91  	return r.querier.TeamValueDelete(ctx, gensql.TeamValueDeleteParams{
    92  		Key:    key,
    93  		TeamID: teamID,
    94  	})
    95  }
    96  
    97  func (r *Repo) TeamConfigurableValuesGet(ctx context.Context, chartType gensql.ChartType, teamID string, obj any) error {
    98  	teamValues, err := r.querier.TeamValuesGet(ctx, gensql.TeamValuesGetParams{
    99  		ChartType: chartType,
   100  		TeamID:    teamID,
   101  	})
   102  	if err != nil {
   103  		return err
   104  	}
   105  
   106  	values := map[string]string{}
   107  	for _, value := range teamValues {
   108  		values[value.Key] = value.Value
   109  	}
   110  
   111  	return reflect.InterfaceToStruct(obj, values)
   112  }
   113  
   114  func stringSliceToLower(vals []string) []string {
   115  	var out []string
   116  	for _, v := range vals {
   117  		out = append(out, strings.ToLower(v))
   118  	}
   119  
   120  	return out
   121  }