Skip to content

Commit 6ccaba1

Browse files
committed
feat: database tables & queries
1 parent a11f8b0 commit 6ccaba1

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
@@ -811,6 +811,13 @@ func (q *querier) AcquireLock(ctx context.Context, id int64) error {
811811
return q.db.AcquireLock(ctx, id)
812812
}
813813

814+
func (q *querier) AcquireNotificationMessages(ctx context.Context, arg database.AcquireNotificationMessagesParams) ([]database.AcquireNotificationMessagesRow, error) {
815+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
816+
return nil, err
817+
}
818+
return q.db.AcquireNotificationMessages(ctx, arg)
819+
}
820+
814821
// TODO: We need to create a ProvisionerJob resource type
815822
func (q *querier) AcquireProvisionerJob(ctx context.Context, arg database.AcquireProvisionerJobParams) (database.ProvisionerJob, error) {
816823
// if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
@@ -855,6 +862,20 @@ func (q *querier) BatchUpdateWorkspaceLastUsedAt(ctx context.Context, arg databa
855862
return q.db.BatchUpdateWorkspaceLastUsedAt(ctx, arg)
856863
}
857864

865+
func (q *querier) BulkMarkNotificationMessagesFailed(ctx context.Context, arg database.BulkMarkNotificationMessagesFailedParams) (int64, error) {
866+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
867+
return 0, err
868+
}
869+
return q.db.BulkMarkNotificationMessagesFailed(ctx, arg)
870+
}
871+
872+
func (q *querier) BulkMarkNotificationMessagesSent(ctx context.Context, arg database.BulkMarkNotificationMessagesSentParams) (int64, error) {
873+
if err := q.authorizeContext(ctx, policy.ActionUpdate, rbac.ResourceSystem); err != nil {
874+
return 0, err
875+
}
876+
return q.db.BulkMarkNotificationMessagesSent(ctx, arg)
877+
}
878+
858879
func (q *querier) CleanTailnetCoordinators(ctx context.Context) error {
859880
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceTailnetCoordinator); err != nil {
860881
return err
@@ -1004,6 +1025,13 @@ func (q *querier) DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx context.Contex
10041025
return q.db.DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx, arg)
10051026
}
10061027

1028+
func (q *querier) DeleteOldNotificationMessages(ctx context.Context) error {
1029+
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceSystem); err != nil {
1030+
return err
1031+
}
1032+
return q.db.DeleteOldNotificationMessages(ctx)
1033+
}
1034+
10071035
func (q *querier) DeleteOldProvisionerDaemons(ctx context.Context) error {
10081036
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceSystem); err != nil {
10091037
return err
@@ -1098,13 +1126,27 @@ func (q *querier) DeleteWorkspaceAgentPortSharesByTemplate(ctx context.Context,
10981126
return q.db.DeleteWorkspaceAgentPortSharesByTemplate(ctx, templateID)
10991127
}
11001128

1129+
func (q *querier) EnqueueNotificationMessage(ctx context.Context, arg database.EnqueueNotificationMessageParams) (database.NotificationMessage, error) {
1130+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
1131+
return database.NotificationMessage{}, err
1132+
}
1133+
return q.db.EnqueueNotificationMessage(ctx, arg)
1134+
}
1135+
11011136
func (q *querier) FavoriteWorkspace(ctx context.Context, id uuid.UUID) error {
11021137
fetch := func(ctx context.Context, id uuid.UUID) (database.Workspace, error) {
11031138
return q.db.GetWorkspaceByID(ctx, id)
11041139
}
11051140
return update(q.log, q.auth, fetch, q.db.FavoriteWorkspace)(ctx, id)
11061141
}
11071142

1143+
func (q *querier) FetchNewMessageMetadata(ctx context.Context, arg database.FetchNewMessageMetadataParams) (database.FetchNewMessageMetadataRow, error) {
1144+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
1145+
return database.FetchNewMessageMetadataRow{}, err
1146+
}
1147+
return q.db.FetchNewMessageMetadata(ctx, arg)
1148+
}
1149+
11081150
func (q *querier) GetAPIKeyByID(ctx context.Context, id string) (database.APIKey, error) {
11091151
return fetch(q.log, q.auth, q.db.GetAPIKeyByID)(ctx, id)
11101152
}
@@ -2459,6 +2501,13 @@ func (q *querier) InsertMissingGroups(ctx context.Context, arg database.InsertMi
24592501
return q.db.InsertMissingGroups(ctx, arg)
24602502
}
24612503

2504+
func (q *querier) InsertNotificationTemplate(ctx context.Context, arg database.InsertNotificationTemplateParams) (database.NotificationTemplate, error) {
2505+
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
2506+
return database.NotificationTemplate{}, err
2507+
}
2508+
return q.db.InsertNotificationTemplate(ctx, arg)
2509+
}
2510+
24622511
func (q *querier) InsertOAuth2ProviderApp(ctx context.Context, arg database.InsertOAuth2ProviderAppParams) (database.OAuth2ProviderApp, error) {
24632512
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceOauth2App); err != nil {
24642513
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)