github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/internal/service/contracts.go (about)

     1  package service
     2  
     3  import (
     4  	"github.com/esnet/gdg/internal/service/filters"
     5  	"github.com/esnet/gdg/internal/service/types"
     6  	gdgType "github.com/esnet/gdg/internal/types"
     7  	"github.com/grafana/grafana-openapi-client-go/models"
     8  )
     9  
    10  type ServerInfoApi interface {
    11  	GetServerInfo() map[string]interface{}
    12  }
    13  
    14  type GrafanaService interface {
    15  	OrganizationsApi
    16  	DashboardsApi
    17  	DashboardPermissionsApi
    18  	ConnectionsApi
    19  	UsersApi
    20  	FoldersApi
    21  	LibraryElementsApi
    22  	TeamsApi
    23  
    24  	AuthenticationApi
    25  	//MetaData
    26  	ServerInfoApi
    27  }
    28  
    29  // ConnectionsApi Contract definition
    30  type ConnectionsApi interface {
    31  	ListConnections(filter filters.Filter) []models.DataSourceListItemDTO
    32  	DownloadConnections(filter filters.Filter) []string
    33  	UploadConnections(filter filters.Filter) []string
    34  	DeleteAllConnections(filter filters.Filter) []string
    35  	ConnectionPermissions
    36  }
    37  
    38  type ConnectionPermissions interface {
    39  	// Permissions Enterprise only
    40  	ListConnectionPermissions(filter filters.Filter) map[*models.DataSourceListItemDTO]*models.DataSourcePermissionsDTO
    41  	DownloadConnectionPermissions(filter filters.Filter) []string
    42  	UploadConnectionPermissions(filter filters.Filter) []string
    43  	DeleteAllConnectionPermissions(filter filters.Filter) []string
    44  }
    45  
    46  // DashboardsApi Contract definition
    47  type DashboardsApi interface {
    48  	ListDashboards(filter filters.Filter) []*models.Hit
    49  	DownloadDashboards(filter filters.Filter) []string
    50  	UploadDashboards(filter filters.Filter)
    51  	DeleteAllDashboards(filter filters.Filter) []string
    52  	LintDashboards(req types.LintRequest) []string
    53  }
    54  
    55  type DashboardPermissionsApi interface {
    56  	ListDashboardPermissions(filterReq filters.Filter) ([]DashboardAndPermissions, error)
    57  	DownloadDashboardPermissions(filterReq filters.Filter) ([]string, error)
    58  	ClearDashboardPermissions(filterReq filters.Filter) error
    59  	UploadDashboardPermissions(filterReq filters.Filter) ([]string, error)
    60  }
    61  
    62  // FoldersApi Contract definition
    63  type FoldersApi interface {
    64  	ListFolder(filter filters.Filter) []*models.Hit
    65  	DownloadFolders(filter filters.Filter) []string
    66  	UploadFolders(filter filters.Filter) []string
    67  	DeleteAllFolders(filter filters.Filter) []string
    68  	//Permissions
    69  	ListFolderPermissions(filter filters.Filter) map[*models.Hit][]*models.DashboardACLInfoDTO
    70  	DownloadFolderPermissions(filter filters.Filter) []string
    71  	UploadFolderPermissions(filter filters.Filter) []string
    72  }
    73  
    74  type LibraryElementsApi interface {
    75  	ListLibraryElements(filter filters.Filter) []*models.LibraryElementDTO
    76  	ListLibraryElementsConnections(filter filters.Filter, connectionID string) []*models.DashboardFullWithMeta
    77  	DownloadLibraryElements(filter filters.Filter) []string
    78  	UploadLibraryElements(filter filters.Filter) []string
    79  	DeleteAllLibraryElements(filter filters.Filter) []string
    80  }
    81  
    82  // AuthenticationApi Contract definition
    83  type AuthenticationApi interface {
    84  	TokenApi
    85  	ServiceAccountApi
    86  	Login()
    87  }
    88  
    89  // OrgPreferencesApi Contract definition
    90  type OrgPreferencesApi interface {
    91  	GetOrgPreferences(orgName string) (*models.Preferences, error)
    92  	UploadOrgPreferences(orgName string, pref *models.Preferences) error
    93  }
    94  
    95  type organizationCrudApi interface {
    96  	ListOrganizations(filter filters.Filter, withPreferences bool) []*gdgType.OrgsDTOWithPreferences
    97  	DownloadOrganizations(filter filters.Filter) []string
    98  	UploadOrganizations(filter filters.Filter) []string
    99  }
   100  
   101  type organizationToolsApi interface {
   102  	//Manage Active Organization
   103  	SetOrganizationByName(name string, useSlug bool) error
   104  	GetUserOrganization() *models.OrgDetailsDTO
   105  	GetTokenOrganization() *models.OrgDetailsDTO
   106  	SetUserOrganizations(id int64) error
   107  	ListUserOrganizations() ([]*models.UserOrgDTO, error)
   108  }
   109  
   110  // organizationUserCrudApi  Manages user memberships to an org
   111  type organizationUserCrudApi interface {
   112  	ListOrgUsers(orgId int64) []*models.OrgUserDTO
   113  	AddUserToOrg(role, orgSlug string, userId int64) error
   114  	DeleteUserFromOrg(orgId string, userId int64) error
   115  	UpdateUserInOrg(role, orgSlug string, userId int64) error
   116  }
   117  
   118  // OrganizationsApi Contract definition
   119  type OrganizationsApi interface {
   120  	organizationCrudApi
   121  	organizationToolsApi
   122  	organizationUserCrudApi
   123  	OrgPreferencesApi
   124  	InitOrganizations()
   125  }
   126  
   127  type ServiceAccountApi interface {
   128  	ListServiceAccounts() []*gdgType.ServiceAccountDTOWithTokens
   129  	ListServiceAccountsTokens(id int64) ([]*models.TokenDTO, error)
   130  	DeleteAllServiceAccounts() []string
   131  	DeleteServiceAccountTokens(serviceId int64) []string
   132  	CreateServiceAccountToken(name int64, role string, expiration int64) (*models.NewAPIKeyResult, error)
   133  	CreateServiceAccount(name, role string, expiration int64) (*models.ServiceAccountDTO, error)
   134  }
   135  
   136  type TeamsApi interface {
   137  	//Team
   138  	DownloadTeams(filter filters.Filter) map[*models.TeamDTO][]*models.TeamMemberDTO
   139  	UploadTeams(filter filters.Filter) map[*models.TeamDTO][]*models.TeamMemberDTO
   140  	ListTeams(filter filters.Filter) map[*models.TeamDTO][]*models.TeamMemberDTO
   141  	DeleteTeam(filter filters.Filter) ([]*models.TeamDTO, error)
   142  }
   143  
   144  type TokenApi interface {
   145  	ListAPIKeys() []*models.APIKeyDTO
   146  	DeleteAllTokens() []string
   147  	CreateAPIKey(name, role string, expiration int64) (*models.NewAPIKeyResult, error)
   148  }
   149  
   150  // UsersApi Contract definition
   151  type UsersApi interface {
   152  	//UserApi
   153  	ListUsers(filter filters.Filter) []*models.UserSearchHitDTO
   154  	DownloadUsers(filter filters.Filter) []string
   155  	UploadUsers(filter filters.Filter) []gdgType.UserProfileWithAuth
   156  	DeleteAllUsers(filter filters.Filter) []string
   157  	// Tools
   158  	PromoteUser(userLogin string) (string, error)
   159  	GetUserInfo() (*models.UserProfileDTO, error)
   160  }