getDatabasesForRoleGrant fetches database messages for the given database identifiers. Used exclusively by role grant approval flow to retrieve database information. Returns a deduplicated list of databases.
(ctx context.Context, stores *store.Store, projectID string, databaseIdentifiers []string)
| 906 | // Used exclusively by role grant approval flow to retrieve database information. |
| 907 | // Returns a deduplicated list of databases. |
| 908 | func getDatabasesForRoleGrant(ctx context.Context, stores *store.Store, projectID string, databaseIdentifiers []string) ([]*store.DatabaseMessage, error) { |
| 909 | // Parse and deduplicate database identifiers |
| 910 | type dbKey struct { |
| 911 | instanceID string |
| 912 | databaseName string |
| 913 | } |
| 914 | requestedDBs := make(map[dbKey]bool) |
| 915 | for _, identifier := range databaseIdentifiers { |
| 916 | instanceID, databaseName, err := common.GetInstanceDatabaseID(identifier) |
| 917 | if err != nil { |
| 918 | return nil, err |
| 919 | } |
| 920 | requestedDBs[dbKey{instanceID: instanceID, databaseName: databaseName}] = true |
| 921 | } |
| 922 | |
| 923 | // Batch fetch all databases in the project |
| 924 | allDatabases, err := stores.ListDatabases(ctx, &store.FindDatabaseMessage{ProjectID: &projectID}) |
| 925 | if err != nil { |
| 926 | return nil, errors.Wrapf(err, "failed to list databases for project %q", projectID) |
| 927 | } |
| 928 | |
| 929 | // Filter to only requested databases |
| 930 | var result []*store.DatabaseMessage |
| 931 | for _, db := range allDatabases { |
| 932 | key := dbKey{instanceID: db.InstanceID, databaseName: db.DatabaseName} |
| 933 | if requestedDBs[key] { |
| 934 | result = append(result, db) |
| 935 | } |
| 936 | } |
| 937 | |
| 938 | return result, nil |
| 939 | } |
| 940 | |
| 941 | // getApprovalSourceFromPlan determines the approval rule source enum from the plan config. |
| 942 | // This is used after the risk layer removal to directly filter approval rules by source. |
no test coverage detected