Skip to content

Commit d7f68c5

Browse files
committed
Add project query functions
1 parent f7222c6 commit d7f68c5

File tree

5 files changed

+545
-14
lines changed

5 files changed

+545
-14
lines changed

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ database/dump.sql: $(wildcard database/migrations/*.sql)
1111
go run database/dump/main.go
1212

1313
# Generates Go code for querying the database.
14-
database/generate: database/dump.sql database/query.sql
14+
database/generate: fmt/sql database/dump.sql database/query.sql
1515
cd database && sqlc generate && rm db_tmp.go
1616
cd database && gofmt -w -r 'Querier -> querier' *.go
1717
cd database && gofmt -w -r 'Queries -> sqlQuerier' *.go
@@ -27,12 +27,13 @@ else
2727
endif
2828
.PHONY: fmt/prettier
2929

30-
fmt/sql:
30+
fmt/sql: ./database/query.sql
3131
npx sql-formatter \
3232
--language postgresql \
3333
--lines-between-queries 2 \
3434
./database/query.sql \
3535
--output ./database/query.sql
36+
sed -i 's/@ /@/g' ./database/query.sql
3637

3738
fmt: fmt/prettier fmt/sql
3839
.PHONY: fmt

database/databasefake/databasefake.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package databasefake
33
import (
44
"context"
55
"database/sql"
6+
"strings"
67

78
"github.com/coder/coder/database"
89
)
@@ -14,15 +15,25 @@ func New() database.Store {
1415
organizations: make([]database.Organization, 0),
1516
organizationMembers: make([]database.OrganizationMember, 0),
1617
users: make([]database.User, 0),
18+
19+
project: make([]database.Project, 0),
20+
projectHistory: make([]database.ProjectHistory, 0),
21+
projectParameter: make([]database.ProjectParameter, 0),
1722
}
1823
}
1924

2025
// fakeQuerier replicates database functionality to enable quick testing.
2126
type fakeQuerier struct {
27+
// Legacy tables
2228
apiKeys []database.APIKey
2329
organizations []database.Organization
2430
organizationMembers []database.OrganizationMember
2531
users []database.User
32+
33+
// New tables
34+
project []database.Project
35+
projectHistory []database.ProjectHistory
36+
projectParameter []database.ProjectParameter
2637
}
2738

2839
// InTx doesn't rollback data properly for in-memory yet.
@@ -89,6 +100,48 @@ func (q *fakeQuerier) GetOrganizationsByUserID(_ context.Context, userID string)
89100
return organizations, nil
90101
}
91102

103+
func (q *fakeQuerier) GetProjectByOrganizationAndName(_ context.Context, arg database.GetProjectByOrganizationAndNameParams) (database.Project, error) {
104+
for _, project := range q.project {
105+
if project.OrganizationID != arg.OrganizationID {
106+
continue
107+
}
108+
if strings.EqualFold(project.Name, arg.Name) {
109+
continue
110+
}
111+
return project, nil
112+
}
113+
return database.Project{}, sql.ErrNoRows
114+
}
115+
116+
func (q *fakeQuerier) GetProjectsByOrganizationIDs(_ context.Context, ids []string) ([]database.Project, error) {
117+
projects := make([]database.Project, 0)
118+
for _, project := range q.project {
119+
for _, id := range ids {
120+
if project.OrganizationID == id {
121+
projects = append(projects, project)
122+
break
123+
}
124+
}
125+
}
126+
if len(projects) == 0 {
127+
return nil, sql.ErrNoRows
128+
}
129+
return projects, nil
130+
}
131+
132+
func (q *fakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg database.GetOrganizationMemberByUserIDParams) (database.OrganizationMember, error) {
133+
for _, organizationMember := range q.organizationMembers {
134+
if organizationMember.OrganizationID != arg.OrganizationID {
135+
continue
136+
}
137+
if organizationMember.UserID != arg.UserID {
138+
continue
139+
}
140+
return organizationMember, nil
141+
}
142+
return database.OrganizationMember{}, sql.ErrNoRows
143+
}
144+
92145
func (q *fakeQuerier) InsertAPIKey(_ context.Context, arg database.InsertAPIKeyParams) (database.APIKey, error) {
93146
//nolint:gosimple
94147
key := database.APIKey{
@@ -136,6 +189,58 @@ func (q *fakeQuerier) InsertOrganizationMember(_ context.Context, arg database.I
136189
return organizationMember, nil
137190
}
138191

192+
func (q *fakeQuerier) InsertProject(_ context.Context, arg database.InsertProjectParams) (database.Project, error) {
193+
project := database.Project{
194+
ID: arg.ID,
195+
Created: arg.Created,
196+
Updated: arg.Updated,
197+
OrganizationID: arg.OrganizationID,
198+
Name: arg.Name,
199+
Provisioner: arg.Provisioner,
200+
}
201+
q.project = append(q.project, project)
202+
return project, nil
203+
}
204+
205+
func (q *fakeQuerier) InsertProjectHistory(_ context.Context, arg database.InsertProjectHistoryParams) (database.ProjectHistory, error) {
206+
//nolint:gosimple
207+
history := database.ProjectHistory{
208+
ID: arg.ID,
209+
ProjectID: arg.ProjectID,
210+
Created: arg.Created,
211+
Updated: arg.Updated,
212+
Name: arg.Name,
213+
Description: arg.Description,
214+
StorageMethod: arg.StorageMethod,
215+
StorageSource: arg.StorageSource,
216+
ImportJobID: arg.ImportJobID,
217+
}
218+
q.projectHistory = append(q.projectHistory, history)
219+
return history, nil
220+
}
221+
222+
func (q *fakeQuerier) InsertProjectParameter(_ context.Context, arg database.InsertProjectParameterParams) (database.ProjectParameter, error) {
223+
//nolint:gosimple
224+
param := database.ProjectParameter{
225+
ID: arg.ID,
226+
ProjectHistoryID: arg.ProjectHistoryID,
227+
Name: arg.Name,
228+
Description: arg.Description,
229+
DefaultSource: arg.DefaultSource,
230+
AllowOverrideSource: arg.AllowOverrideSource,
231+
DefaultDestination: arg.DefaultDestination,
232+
AllowOverrideDestination: arg.AllowOverrideDestination,
233+
DefaultRefresh: arg.DefaultRefresh,
234+
RedisplayValue: arg.RedisplayValue,
235+
ValidationError: arg.ValidationError,
236+
ValidationCondition: arg.ValidationCondition,
237+
ValidationTypeSystem: arg.ValidationTypeSystem,
238+
ValidationValueType: arg.ValidationValueType,
239+
}
240+
q.projectParameter = append(q.projectParameter, param)
241+
return param, nil
242+
}
243+
139244
func (q *fakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) {
140245
user := database.User{
141246
ID: arg.ID,

database/querier.go

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

database/query.sql

Lines changed: 115 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,59 @@ FROM
4242
users;
4343

4444
-- name: GetOrganizationByName :one
45-
SELECT * FROM organizations WHERE name = $1 LIMIT 1;
45+
SELECT
46+
*
47+
FROM
48+
organizations
49+
WHERE
50+
name = $1
51+
LIMIT
52+
1;
4653

4754
-- name: GetOrganizationsByUserID :many
48-
SELECT * FROM organizations WHERE id = (
49-
SELECT organization_id FROM organization_members WHERE user_id = $1
50-
);
55+
SELECT
56+
*
57+
FROM
58+
organizations
59+
WHERE
60+
id = (
61+
SELECT
62+
organization_id
63+
FROM
64+
organization_members
65+
WHERE
66+
user_id = $1
67+
);
68+
69+
-- name: GetOrganizationMemberByUserID :one
70+
SELECT
71+
*
72+
FROM
73+
organization_members
74+
WHERE
75+
organization_id = $1
76+
AND user_id = $2
77+
LIMIT
78+
1;
79+
80+
-- name: GetProjectByOrganizationAndName :one
81+
SELECT
82+
*
83+
FROM
84+
project
85+
WHERE
86+
organization_id = $1
87+
AND name = $2
88+
LIMIT
89+
1;
90+
91+
-- name: GetProjectsByOrganizationIDs :many
92+
SELECT
93+
*
94+
FROM
95+
project
96+
WHERE
97+
organization_id = ANY(@ids :: text [ ]);
5198

5299
-- name: InsertAPIKey :one
53100
INSERT INTO
@@ -88,10 +135,72 @@ VALUES
88135
) RETURNING *;
89136

90137
-- name: InsertOrganization :one
91-
INSERT INTO organizations (id, name, description, created_at, updated_at) VALUES ($1, $2, $3, $4, $5) RETURNING *;
138+
INSERT INTO
139+
organizations (id, name, description, created_at, updated_at)
140+
VALUES
141+
($1, $2, $3, $4, $5) RETURNING *;
92142

93143
-- name: InsertOrganizationMember :one
94-
INSERT INTO organization_members (organization_id, user_id, created_at, updated_at, roles) VALUES ($1, $2, $3, $4, $5) RETURNING *;
144+
INSERT INTO
145+
organization_members (
146+
organization_id,
147+
user_id,
148+
created_at,
149+
updated_at,
150+
roles
151+
)
152+
VALUES
153+
($1, $2, $3, $4, $5) RETURNING *;
154+
155+
-- name: InsertProject :one
156+
INSERT INTO
157+
project (
158+
id,
159+
created,
160+
updated,
161+
organization_id,
162+
name,
163+
provisioner
164+
)
165+
VALUES
166+
($1, $2, $3, $4, $5, $6) RETURNING *;
167+
168+
-- name: InsertProjectHistory :one
169+
INSERT INTO
170+
project_history (
171+
id,
172+
project_id,
173+
created,
174+
updated,
175+
name,
176+
description,
177+
storage_method,
178+
storage_source,
179+
import_job_id
180+
)
181+
VALUES
182+
($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;
183+
184+
-- name: InsertProjectParameter :one
185+
INSERT INTO
186+
project_parameter (
187+
id,
188+
project_history_id,
189+
name,
190+
description,
191+
default_source,
192+
allow_override_source,
193+
default_destination,
194+
allow_override_destination,
195+
default_refresh,
196+
redisplay_value,
197+
validation_error,
198+
validation_condition,
199+
validation_type_system,
200+
validation_value_type
201+
)
202+
VALUES
203+
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING *;
95204

96205
-- name: InsertUser :one
97206
INSERT INTO

0 commit comments

Comments
 (0)