Add Projects #13

Open
allanger wants to merge 12 commits from add-projects into main
3 changed files with 32 additions and 10 deletions
Showing only changes of commit e132e143bd - Show all commits

View File

@@ -31,14 +31,14 @@ func CreateProject(ctx context.Context, db *sql.DB, data *ProjectData) error {
return err
}
defer tx.Rollback()
query := `
queryProject := `
INSERT INTO projects
(uuid, name, slug, description, owner_user_id, billing_account_id, created_by, created_at, updated_by, updated_at)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
`
if _, err := tx.ExecContext(ctx, query,
if _, err := tx.ExecContext(ctx, queryProject,
data.UUID, data.Name, data.Slug, data.Description, data.CreatedBy,
data.CreatedBy, data.CreatedBy, data.CreatedAt, data.CreatedBy, data.CreatedAt); err != nil {
var pgErr *pgconn.PgError
@@ -54,6 +54,28 @@ func CreateProject(ctx context.Context, db *sql.DB, data *ProjectData) error {
return err
}
queryMembership := `
INSERT INTO project_membership
(project_uuid, user_uuid, role, status, invited_by, joined_at)
VALUES
($1, $2, $3, $4, $5, $6);
`
if _, err := tx.ExecContext(ctx, queryMembership,
data.UUID, data.CreatedBy, "owner", "active", data.CreatedBy, data.CreatedAt,
); err != nil {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) {
switch pgErr.Code {
case pgerrcode.UniqueViolation:
return ErrAlreadyExists
case pgerrcode.CheckViolation:
return ErrCheckNotPassed
}
return err
}
return err
}
if err := tx.Commit(); err != nil {
return err
}

View File

@@ -1,7 +1,7 @@
DROP INDEX IF EXISTS idx_project_memberships_project;
DROP INDEX IF EXISTS idx_project_memberships_user;
DROP INDEX IF EXISTS idx_project_membership_project;
DROP INDEX IF EXISTS idx_project_membership_user;
DROP TABLE IF EXISTS project_memberships;
DROP TABLE IF EXISTS project_membership;
DROP TYPE IF EXISTS membership_status;
DROP TYPE IF EXISTS project_role;

View File

@@ -10,7 +10,7 @@ CREATE TYPE membership_status AS ENUM (
'suspended'
);
CREATE TABLE project_memberships (
CREATE TABLE project_membership (
project_uuid UUID NOT NULL
REFERENCES projects(uuid)
ON DELETE CASCADE,
@@ -28,8 +28,8 @@ CREATE TABLE project_memberships (
PRIMARY KEY (project_uuid, user_uuid)
);
CREATE INDEX idx_project_memberships_user
ON project_memberships(user_uuid);
CREATE INDEX idx_project_membership_user
ON project_membership(user_uuid);
CREATE INDEX idx_project_memberships_project
ON project_memberships(project_uuid);
CREATE INDEX idx_project_membership_project
ON project_membership(project_uuid);