Skip to content

Commit 25636ec

Browse files
committed
feat: database tables & queries
1 parent 7958c52 commit 25636ec

File tree

17 files changed

+1109
-3
lines changed

17 files changed

+1109
-3
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,13 @@ func (q *querier) AcquireLock(ctx context.Context, id int64) error {
785785
return q.db.AcquireLock(ctx, id)
786786
}
787787

788+
func (q *querier) AcquireNotificationMessages(ctx context.Context, arg database.AcquireNotificationMessagesParams) ([]database.AcquireNotificationMessagesRow, error) {
789+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
790+
return nil, err
791+
}
792+
return q.db.AcquireNotificationMessages(ctx, arg)
793+
}
794+
788795
// TODO: We need to create a ProvisionerJob resource type
789796
func (q *querier) AcquireProvisionerJob(ctx context.Context, arg database.AcquireProvisionerJobParams) (database.ProvisionerJob, error) {
790797
// if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
@@ -829,6 +836,20 @@ func (q *querier) BatchUpdateWorkspaceLastUsedAt(ctx context.Context, arg databa
829836
return q.db.BatchUpdateWorkspaceLastUsedAt(ctx, arg)
830837
}
831838

839+
func (q *querier) BulkMarkNotificationMessagesFailed(ctx context.Context, arg database.BulkMarkNotificationMessagesFailedParams) (int64, error) {
840+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
841+
return 0, err
842+
}
843+
return q.db.BulkMarkNotificationMessagesFailed(ctx, arg)
844+
}
845+
846+
func (q *querier) BulkMarkNotificationMessagesSent(ctx context.Context, arg database.BulkMarkNotificationMessagesSentParams) (int64, error) {
847+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
848+
return 0, err
849+
}
850+
return q.db.BulkMarkNotificationMessagesSent(ctx, arg)
851+
}
852+
832853
func (q *querier) CleanTailnetCoordinators(ctx context.Context) error {
833854
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceTailnetCoordinator); err != nil {
834855
return err
@@ -978,6 +999,13 @@ func (q *querier) DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx context.Contex
978999
return q.db.DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx, arg)
9791000
}
9801001

1002+
func (q *querier) DeleteOldNotificationMessages(ctx context.Context) error {
1003+
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceSystem); err != nil {
1004+
return err
1005+
}
1006+
return q.db.DeleteOldNotificationMessages(ctx)
1007+
}
1008+
9811009
func (q *querier) DeleteOldProvisionerDaemons(ctx context.Context) error {
9821010
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceSystem); err != nil {
9831011
return err
@@ -1072,13 +1100,27 @@ func (q *querier) DeleteWorkspaceAgentPortSharesByTemplate(ctx context.Context,
10721100
return q.db.DeleteWorkspaceAgentPortSharesByTemplate(ctx, templateID)
10731101
}
10741102

1103+
func (q *querier) EnqueueNotificationMessage(ctx context.Context, arg database.EnqueueNotificationMessageParams) (database.NotificationMessage, error) {
1104+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
1105+
return database.NotificationMessage{}, err
1106+
}
1107+
return q.db.EnqueueNotificationMessage(ctx, arg)
1108+
}
1109+
10751110
func (q *querier) FavoriteWorkspace(ctx context.Context, id uuid.UUID) error {
10761111
fetch := func(ctx context.Context, id uuid.UUID) (database.Workspace, error) {
10771112
return q.db.GetWorkspaceByID(ctx, id)
10781113
}
10791114
return update(q.log, q.auth, fetch, q.db.FavoriteWorkspace)(ctx, id)
10801115
}
10811116

1117+
func (q *querier) FetchNewMessageMetadata(ctx context.Context, arg database.FetchNewMessageMetadataParams) (database.FetchNewMessageMetadataRow, error) {
1118+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
1119+
return database.FetchNewMessageMetadataRow{}, err
1120+
}
1121+
return q.db.FetchNewMessageMetadata(ctx, arg)
1122+
}
1123+
10821124
func (q *querier) GetAPIKeyByID(ctx context.Context, id string) (database.APIKey, error) {
10831125
return fetch(q.log, q.auth, q.db.GetAPIKeyByID)(ctx, id)
10841126
}
@@ -2433,6 +2475,13 @@ func (q *querier) InsertMissingGroups(ctx context.Context, arg database.InsertMi
24332475
return q.db.InsertMissingGroups(ctx, arg)
24342476
}
24352477

2478+
func (q *querier) InsertNotificationTemplate(ctx context.Context, arg database.InsertNotificationTemplateParams) (database.NotificationTemplate, error) {
2479+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
2480+
return database.NotificationTemplate{}, err
2481+
}
2482+
return q.db.InsertNotificationTemplate(ctx, arg)
2483+
}
2484+
24362485
func (q *querier) InsertOAuth2ProviderApp(ctx context.Context, arg database.InsertOAuth2ProviderAppParams) (database.OAuth2ProviderApp, error) {
24372486
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceOauth2App); err != nil {
24382487
return database.OAuth2ProviderApp{}, err

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,6 +2435,36 @@ func (s *MethodTestSuite) TestSystemFunctions() {
24352435
AgentID: uuid.New(),
24362436
}).Asserts(tpl, policy.ActionCreate)
24372437
}))
2438+
s.Run("AcquireNotificationMessages", s.Subtest(func(db database.Store, check *expects) {
2439+
// TODO: update this test once we have a specific role for notifications
2440+
check.Args(database.AcquireNotificationMessagesParams{}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
2441+
}))
2442+
s.Run("BulkMarkNotificationMessagesFailed", s.Subtest(func(db database.Store, check *expects) {
2443+
// TODO: update this test once we have a specific role for notifications
2444+
check.Args(database.BulkMarkNotificationMessagesFailedParams{}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
2445+
}))
2446+
s.Run("BulkMarkNotificationMessagesSent", s.Subtest(func(db database.Store, check *expects) {
2447+
// TODO: update this test once we have a specific role for notifications
2448+
check.Args(database.BulkMarkNotificationMessagesSentParams{}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
2449+
}))
2450+
s.Run("DeleteOldNotificationMessages", s.Subtest(func(db database.Store, check *expects) {
2451+
// TODO: update this test once we have a specific role for notifications
2452+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionDelete)
2453+
}))
2454+
s.Run("EnqueueNotificationMessage", s.Subtest(func(db database.Store, check *expects) {
2455+
// TODO: update this test once we have a specific role for notifications
2456+
check.Args(database.EnqueueNotificationMessageParams{
2457+
Method: database.NotificationMethodWebhook,
2458+
}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
2459+
}))
2460+
s.Run("FetchNewMessageMetadata", s.Subtest(func(db database.Store, check *expects) {
2461+
// TODO: update this test once we have a specific role for notifications
2462+
check.Args(database.FetchNewMessageMetadataParams{}).Asserts(rbac.ResourceSystem, policy.ActionRead)
2463+
}))
2464+
s.Run("InsertNotificationTemplate", s.Subtest(func(db database.Store, check *expects) {
2465+
// TODO: update this test once we have a specific role for notifications
2466+
check.Args(database.InsertNotificationTemplateParams{}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
2467+
}))
24382468
}
24392469

24402470
func (s *MethodTestSuite) TestOAuth2ProviderApps() {

coderd/database/dbmem/dbmem.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,15 @@ func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error {
905905
return xerrors.New("AcquireLock must only be called within a transaction")
906906
}
907907

908+
func (*FakeQuerier) AcquireNotificationMessages(_ context.Context, arg database.AcquireNotificationMessagesParams) ([]database.AcquireNotificationMessagesRow, error) {
909+
err := validateDatabaseType(arg)
910+
if err != nil {
911+
return nil, err
912+
}
913+
// nolint:nilnil // Irrelevant.
914+
return nil, nil
915+
}
916+
908917
func (q *FakeQuerier) AcquireProvisionerJob(_ context.Context, arg database.AcquireProvisionerJobParams) (database.ProvisionerJob, error) {
909918
if err := validateDatabaseType(arg); err != nil {
910919
return database.ProvisionerJob{}, err
@@ -1167,6 +1176,22 @@ func (q *FakeQuerier) BatchUpdateWorkspaceLastUsedAt(_ context.Context, arg data
11671176
return nil
11681177
}
11691178

1179+
func (*FakeQuerier) BulkMarkNotificationMessagesFailed(_ context.Context, arg database.BulkMarkNotificationMessagesFailedParams) (int64, error) {
1180+
err := validateDatabaseType(arg)
1181+
if err != nil {
1182+
return 0, err
1183+
}
1184+
return -1, nil
1185+
}
1186+
1187+
func (*FakeQuerier) BulkMarkNotificationMessagesSent(_ context.Context, arg database.BulkMarkNotificationMessagesSentParams) (int64, error) {
1188+
err := validateDatabaseType(arg)
1189+
if err != nil {
1190+
return 0, err
1191+
}
1192+
return -1, nil
1193+
}
1194+
11701195
func (*FakeQuerier) CleanTailnetCoordinators(_ context.Context) error {
11711196
return ErrUnimplemented
11721197
}
@@ -1502,6 +1527,10 @@ func (q *FakeQuerier) DeleteOAuth2ProviderAppTokensByAppAndUserID(_ context.Cont
15021527
return nil
15031528
}
15041529

1530+
func (*FakeQuerier) DeleteOldNotificationMessages(_ context.Context) error {
1531+
return nil
1532+
}
1533+
15051534
func (q *FakeQuerier) DeleteOldProvisionerDaemons(_ context.Context) error {
15061535
q.mutex.Lock()
15071536
defer q.mutex.Unlock()
@@ -1717,6 +1746,14 @@ func (q *FakeQuerier) DeleteWorkspaceAgentPortSharesByTemplate(_ context.Context
17171746
return nil
17181747
}
17191748

1749+
func (*FakeQuerier) EnqueueNotificationMessage(_ context.Context, arg database.EnqueueNotificationMessageParams) (database.NotificationMessage, error) {
1750+
err := validateDatabaseType(arg)
1751+
if err != nil {
1752+
return database.NotificationMessage{}, err
1753+
}
1754+
return database.NotificationMessage{}, nil
1755+
}
1756+
17201757
func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg uuid.UUID) error {
17211758
err := validateDatabaseType(arg)
17221759
if err != nil {
@@ -1736,6 +1773,14 @@ func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg uuid.UUID) error
17361773
return nil
17371774
}
17381775

1776+
func (*FakeQuerier) FetchNewMessageMetadata(_ context.Context, arg database.FetchNewMessageMetadataParams) (database.FetchNewMessageMetadataRow, error) {
1777+
err := validateDatabaseType(arg)
1778+
if err != nil {
1779+
return database.FetchNewMessageMetadataRow{}, err
1780+
}
1781+
return database.FetchNewMessageMetadataRow{}, nil
1782+
}
1783+
17391784
func (q *FakeQuerier) GetAPIKeyByID(_ context.Context, id string) (database.APIKey, error) {
17401785
q.mutex.RLock()
17411786
defer q.mutex.RUnlock()
@@ -6063,6 +6108,14 @@ func (q *FakeQuerier) InsertMissingGroups(_ context.Context, arg database.Insert
60636108
return newGroups, nil
60646109
}
60656110

6111+
func (*FakeQuerier) InsertNotificationTemplate(_ context.Context, arg database.InsertNotificationTemplateParams) (database.NotificationTemplate, error) {
6112+
err := validateDatabaseType(arg)
6113+
if err != nil {
6114+
return database.NotificationTemplate{}, err
6115+
}
6116+
return database.NotificationTemplate{}, nil
6117+
}
6118+
60666119
func (q *FakeQuerier) InsertOAuth2ProviderApp(_ context.Context, arg database.InsertOAuth2ProviderAppParams) (database.OAuth2ProviderApp, error) {
60676120
err := validateDatabaseType(arg)
60686121
if err != nil {

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 49 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)