Skip to content

Commit c8dc8f7

Browse files
feat: add organization creator email (#1255)
1 parent fa6d61c commit c8dc8f7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2027
-1549
lines changed

api-description/web-api.swagger.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3353,6 +3353,8 @@ definitions:
33533353
userCount:
33543354
type: integer
33553355
format: int32
3356+
ownerEmail:
3357+
type: string
33563358
environmentArchiveEnvironmentV2Command:
33573359
type: object
33583360
environmentArchiveEnvironmentV2Request:
@@ -3460,6 +3462,8 @@ definitions:
34603462
type: boolean
34613463
isSystemAdmin:
34623464
type: boolean
3465+
ownerEmail:
3466+
type: string
34633467
environmentCreateOrganizationRequest:
34643468
type: object
34653469
properties:
@@ -3482,6 +3486,8 @@ definitions:
34823486
type: string
34833487
urlCode:
34843488
type: string
3489+
ownerEmail:
3490+
type: string
34853491
description: 'TODO: add organizationID once we support organization create UI.'
34863492
environmentCreateProjectRequest:
34873493
type: object
@@ -3504,6 +3510,8 @@ definitions:
35043510
type: string
35053511
urlCode:
35063512
type: string
3513+
ownerEmail:
3514+
type: string
35073515
environmentCreateTrialProjectRequest:
35083516
type: object
35093517
properties:
@@ -3643,6 +3651,7 @@ definitions:
36433651
- URL_CODE
36443652
- CREATED_AT
36453653
- UPDATED_AT
3654+
- FEATURE_COUNT
36463655
default: DEFAULT
36473656
environmentListEnvironmentsV2RequestOrderDirection:
36483657
type: string
@@ -3690,6 +3699,9 @@ definitions:
36903699
- UPDATED_AT
36913700
- NAME
36923701
- URL_CODE
3702+
- PROJECT_COUNT
3703+
- ENVIRONMENT_COUNT
3704+
- USER_COUNT
36933705
default: DEFAULT
36943706
environmentListOrganizationsRequestOrderDirection:
36953707
type: string
@@ -3739,6 +3751,8 @@ definitions:
37393751
- UPDATED_AT
37403752
- NAME
37413753
- URL_CODE
3754+
- ENVIRONMENT_COUNT
3755+
- FEATURE_COUNT
37423756
default: DEFAULT
37433757
environmentListProjectsRequestOrderDirection:
37443758
type: string

manifests/bucketeer/charts/web/values.yaml

Lines changed: 4 additions & 3 deletions
Large diffs are not rendered by default.

manifests/bucketeer/values.dev.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ web:
8282
email: demo@bucketeer.io
8383
password: demo
8484
organizationId: demo
85+
organizationOwnerEmail: demo@bucketeer.io
8586
projectId: demo
8687
environmentId: demo
8788
isSystemAdmin: true
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Modify "organization" table
2+
ALTER TABLE `organization` ADD COLUMN `owner_email` varchar(255) NOT NULL;

migration/mysql/atlas.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
h1:Zj1F3npMVz6OWIvqb3wR3UtbkbwrIU4D278BYxc10Y4=
1+
h1:4nKDaGsoVgDy9YoQUWW3GyfQOic4Zs5DK7+JUW5Sj+4=
22
20240626022133_initialization.sql h1:u9qmPkwWX7PN92qEcDDfR92lrMpwadQSMxUJgv6LjQ0=
33
20240708065726_update_audit_log_table.sql h1:k7gK8Njv1yHMsYXAQtSgMaSbXy4lxyZ9MPzbJyMyyoM=
44
20240815043128_update_auto_ops_rule_table.sql h1:6ib+XfS1uu9AUO3qESvkpUfOu3qUsLwHm9KHcrGEz0E=
@@ -7,3 +7,4 @@ h1:Zj1F3npMVz6OWIvqb3wR3UtbkbwrIU4D278BYxc10Y4=
77
20240821105619_update_push_table.sql h1:i4oKP1T9rtGGmgQ21SA1o7tVQ4gAaeNyVSckKSYDoB0=
88
20240822110001_update_push_table.sql h1:NG45/qGmJDgDlFrKhKLDqmLXMp94S9GOlQ8k/HObCe4=
99
20240827085123_update_environment_id_table.sql h1:VbtGa+UP5wjRjrffXtLTg9eWSZZH047MzMaT4c3JJSE=
10+
20240923154451_update_organization_table.sql h1:AmFazbhx6ZzuW+JMcrpX2kyAKx7TUMUnASJIePRuvBk=

pkg/auth/api/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ func (s *authService) PrepareDemoUser() {
493493
Id: config.OrganizationId,
494494
Name: "Demo organization",
495495
UrlCode: "demo",
496+
OwnerEmail: config.OrganizationOwnerEmail,
496497
Description: "This organization is for demo users",
497498
Disabled: false,
498499
Archived: false,

pkg/auth/interface.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ type GoogleConfig struct {
4444
}
4545

4646
type DemoSignInConfig struct {
47-
Enabled bool `json:"enabled"`
48-
Password string `json:"password"`
49-
Email string `json:"email"`
50-
OrganizationId string `json:"organizationId"`
51-
ProjectId string `json:"projectId"`
52-
EnvironmentId string `json:"environmentId"`
53-
IsSystemAdmin bool `json:"isSystemAdmin"`
47+
Enabled bool `json:"enabled"`
48+
Password string `json:"password"`
49+
Email string `json:"email"`
50+
OrganizationId string `json:"organizationId"`
51+
OrganizationOwnerEmail string `json:"organizationOwnerEmail"`
52+
ProjectId string `json:"projectId"`
53+
EnvironmentId string `json:"environmentId"`
54+
IsSystemAdmin bool `json:"isSystemAdmin"`
5455
}
5556

5657
type OAuthConfig struct {

pkg/environment/api/environment_v2.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ func (s *EnvironmentService) newEnvironmentV2ListOrders(
190190
column = "environment_v2.created_at"
191191
case environmentproto.ListEnvironmentsV2Request_UPDATED_AT:
192192
column = "environment_v2.updated_at"
193+
case environmentproto.ListEnvironmentsV2Request_FEATURE_COUNT:
194+
column = "feature_count"
193195
default:
194196
dt, err := statusInvalidOrderBy.WithDetails(&errdetails.LocalizedMessage{
195197
Locale: localizer.GetLocale(),

pkg/environment/api/error.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,18 @@ var (
2525
statusInvalidCursor = gstatus.New(codes.InvalidArgument, "environment: cursor is invalid")
2626
// Essentially, the id field is required, but no validation is performed because some older services do not have ID.
2727
//statusEnvironmentIDRequired = gstatus.New(codes.InvalidArgument, "environment: environment id must be specified")
28-
statusEnvironmentNameRequired = gstatus.New(codes.InvalidArgument, "environment: environment name must be specified") // nolint:lll
29-
statusInvalidEnvironmentName = gstatus.New(codes.InvalidArgument, "environment: invalid environment name")
30-
statusInvalidEnvironmentUrlCode = gstatus.New(codes.InvalidArgument, "environment: invalid environment url code")
31-
statusProjectIDRequired = gstatus.New(codes.InvalidArgument, "environment: project id must be specified")
32-
statusProjectNameRequired = gstatus.New(codes.InvalidArgument, "environment: project name must be specified")
33-
statusInvalidProjectName = gstatus.New(codes.InvalidArgument, "environment: invalid project name")
34-
statusInvalidProjectUrlCode = gstatus.New(codes.InvalidArgument, "environment: invalid project url code")
35-
statusInvalidProjectCreatorEmail = gstatus.New(codes.InvalidArgument, "environment: invalid project creator email")
36-
statusInvalidOrderBy = gstatus.New(codes.InvalidArgument, "environment: order_by is invalid")
37-
statusOrganizationIDRequired = gstatus.New(codes.InvalidArgument, "environment: organization id must be specified")
38-
statusOrganizationNameRequired = gstatus.New(
28+
statusEnvironmentNameRequired = gstatus.New(codes.InvalidArgument, "environment: environment name must be specified") // nolint:lll
29+
statusInvalidEnvironmentName = gstatus.New(codes.InvalidArgument, "environment: invalid environment name") // nolint:lll
30+
statusInvalidEnvironmentUrlCode = gstatus.New(codes.InvalidArgument, "environment: invalid environment url code") // nolint:lll
31+
statusProjectIDRequired = gstatus.New(codes.InvalidArgument, "environment: project id must be specified") // nolint:lll
32+
statusProjectNameRequired = gstatus.New(codes.InvalidArgument, "environment: project name must be specified") // nolint:lll
33+
statusInvalidProjectName = gstatus.New(codes.InvalidArgument, "environment: invalid project name") // nolint:lll
34+
statusInvalidProjectUrlCode = gstatus.New(codes.InvalidArgument, "environment: invalid project url code") // nolint:lll
35+
statusInvalidProjectCreatorEmail = gstatus.New(codes.InvalidArgument, "environment: invalid project creator email") // nolint:lll
36+
statusInvalidOrganizationCreatorEmail = gstatus.New(codes.InvalidArgument, "environment: invalid organization creator email") // nolint:lll
37+
statusInvalidOrderBy = gstatus.New(codes.InvalidArgument, "environment: order_by is invalid") // nolint:lll
38+
statusOrganizationIDRequired = gstatus.New(codes.InvalidArgument, "environment: organization id must be specified") // nolint:lll
39+
statusOrganizationNameRequired = gstatus.New(
3940
codes.InvalidArgument,
4041
"environment: organization name must be specified",
4142
)

pkg/environment/api/organization.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,13 @@ func (s *EnvironmentService) newOrganizationListOrders(
201201
column = "organization.created_at"
202202
case environmentproto.ListOrganizationsRequest_UPDATED_AT:
203203
column = "organization.updated_at"
204+
case environmentproto.ListOrganizationsRequest_ENVIRONMENT_COUNT:
205+
column = "environments"
206+
case environmentproto.ListOrganizationsRequest_PROJECT_COUNT:
207+
column = "projects"
208+
case environmentproto.ListOrganizationsRequest_USER_COUNT:
209+
column = "users"
210+
204211
default:
205212
dt, err := statusInvalidOrderBy.WithDetails(&errdetails.LocalizedMessage{
206213
Locale: localizer.GetLocale(),
@@ -235,6 +242,7 @@ func (s *EnvironmentService) CreateOrganization(
235242
organization, err := domain.NewOrganization(
236243
name,
237244
urlCode,
245+
req.Command.OwnerEmail,
238246
req.Command.Description,
239247
req.Command.IsTrial,
240248
req.Command.IsSystemAdmin,
@@ -302,6 +310,16 @@ func (s *EnvironmentService) validateCreateOrganizationRequest(
302310
}
303311
return dt.Err()
304312
}
313+
if !emailRegex.MatchString(req.Command.OwnerEmail) {
314+
dt, err := statusInvalidOrganizationCreatorEmail.WithDetails(&errdetails.LocalizedMessage{
315+
Locale: localizer.GetLocale(),
316+
Message: localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "owner_email"),
317+
})
318+
if err != nil {
319+
return statusInternal.Err()
320+
}
321+
return dt.Err()
322+
}
305323
return nil
306324
}
307325

0 commit comments

Comments
 (0)