Add Projects #13
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/jackc/pgerrcode"
|
||||
@@ -103,5 +104,6 @@ func ListProjects(ctx context.Context, db *sql.DB) ([]*ProjectData, error) {
|
||||
FROM projects p
|
||||
JOIN project_membership pm ON pm.project_id = p.id
|
||||
WHERE pm.user_id = ?`
|
||||
fmt.Println(query)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
DROP INDEX IF EXISTS idx_project_memberships_project;
|
||||
DROP INDEX IF EXISTS idx_project_memberships_user;
|
||||
|
||||
DROP TABLE IF EXISTS project_memberships;
|
||||
|
||||
DROP TYPE IF EXISTS membership_status;
|
||||
DROP TYPE IF EXISTS project_role;
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
CREATE TYPE project_role AS ENUM (
|
||||
'member',
|
||||
'admin',
|
||||
'owner'
|
||||
);
|
||||
|
||||
CREATE TYPE membership_status AS ENUM (
|
||||
'invited',
|
||||
'active',
|
||||
'suspended'
|
||||
);
|
||||
|
||||
CREATE TABLE project_memberships (
|
||||
project_uuid UUID NOT NULL
|
||||
REFERENCES projects(uuid)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
user_uuid UUID NOT NULL
|
||||
REFERENCES accounts(uuid)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
role project_role NOT NULL,
|
||||
status membership_status NOT NULL DEFAULT 'active',
|
||||
|
||||
invited_by UUID NULL
|
||||
REFERENCES accounts(uuid),
|
||||
joined_at TIMESTAMP NULL,
|
||||
PRIMARY KEY (project_uuid, user_uuid)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_project_memberships_user
|
||||
ON project_memberships(user_uuid);
|
||||
|
||||
CREATE INDEX idx_project_memberships_project
|
||||
ON project_memberships(project_uuid);
|
||||
|
||||
Reference in New Issue
Block a user