Added ChangeUserRole and corresponding test, also GetProjectId should be fixed.
This commit is contained in:
parent
3a7663124d
commit
f0745c5a75
4 changed files with 57 additions and 7 deletions
|
@ -1,7 +1,9 @@
|
|||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
@ -25,7 +27,8 @@ type Database interface {
|
|||
// ChangeUserRole(username string, projectname string, role string) error
|
||||
// AddTimeReport(projectname string, start time.Time, end time.Time) error
|
||||
// AddUserToProject(username string, projectname string) error
|
||||
// ChangeUserRole(username string, projectname string, role string) error
|
||||
ChangeUserRole(username string, projectname string, role string) error
|
||||
GetProjectId(projectname string) (int, error)
|
||||
}
|
||||
|
||||
// This struct is a wrapper type that holds the database connection
|
||||
|
@ -42,7 +45,6 @@ const projectInsert = "INSERT INTO projects (name, description, owner_user_id) S
|
|||
const promoteToAdmin = "INSERT INTO site_admin (admin_id) SELECT id FROM users WHERE username = ?"
|
||||
const addTimeReport = "INSERT INTO activity (report_id, activity_nbr, start_time, end_time, break, comment) VALUES (?, ?, ?, ?, ?, ?)" // WIP
|
||||
const addUserToProject = "INSERT INTO project_member (project_id, user_id, role) VALUES (?, ?, ?)" // WIP
|
||||
// const changeUserRole = ""
|
||||
|
||||
// DbConnect connects to the database
|
||||
func DbConnect(dbpath string) Database {
|
||||
|
@ -61,6 +63,22 @@ func DbConnect(dbpath string) Database {
|
|||
return &Db{db}
|
||||
}
|
||||
|
||||
func (d *Db) ChangeUserRole(username string, projectname string, role string) error {
|
||||
userID, err := d.GetUserId(username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
projectID, err := d.GetProjectId(projectname)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Update user role in the project using the correct table name
|
||||
_, err = d.Exec("INSERT OR REPLACE INTO user_roles (user_id, project_id, p_role) VALUES (?, ?, ?)", userID, projectID, role)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Db) AddTimeReport(projectname string, start time.Time, end time.Time, breakTime uint32) error { // WIP
|
||||
_, err := d.Exec(addTimeReport, projectname, 0, start, end, breakTime, false)
|
||||
return err
|
||||
|
@ -110,10 +128,16 @@ func (d *Db) GetUserId(username string) (int, error) {
|
|||
return id, err
|
||||
}
|
||||
|
||||
func (d *Db) GetProjectId(projectname string) (int, error) { // WIP, denna kan vara goof
|
||||
func (d *Db) GetProjectId(projectname string) (int, error) {
|
||||
var id int
|
||||
err := d.Get(&id, "SELECT id FROM project WHERE project_name = ?", projectname)
|
||||
return id, err
|
||||
err := d.Get(&id, "SELECT id FROM projects WHERE name = ?", projectname)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, fmt.Errorf("project '%s' not found", projectname)
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
// Creates a new project in the database, associated with a user
|
||||
|
|
|
@ -92,6 +92,32 @@ func TestPromoteToAdmin(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDbChangeUserRole(t *testing.T) {
|
||||
// Set up the initial state
|
||||
db, err := setupState()
|
||||
if err != nil {
|
||||
t.Error("setupState failed:", err)
|
||||
}
|
||||
|
||||
// Add a user
|
||||
err = db.AddUser("test", "password")
|
||||
if err != nil {
|
||||
t.Error("AddUser failed:", err)
|
||||
}
|
||||
|
||||
// Add a project
|
||||
err = db.AddProject("test_project", "project description", "test")
|
||||
if err != nil {
|
||||
t.Error("AddProject failed:", err)
|
||||
}
|
||||
|
||||
// Change user role
|
||||
err = db.ChangeUserRole("test", "test_project", "project_manager")
|
||||
if err != nil {
|
||||
t.Error("ChangeUserRole failed:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// func TestAddTimeReport(t *testing.T) {
|
||||
|
||||
// }
|
||||
|
|
|
@ -5,5 +5,5 @@ CREATE TABLE IF NOT EXISTS project_role (
|
|||
);
|
||||
|
||||
-- Insert the possible roles a user can have in a project.
|
||||
INSERT OR IGNORE INTO project_role (p_role) VALUES ('admin');
|
||||
INSERT OR IGNORE INTO project_role (p_role) VALUES ('project_manager');
|
||||
INSERT OR IGNORE INTO project_role (p_role) VALUES ('member');
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
CREATE TABLE IF NOT EXISTS user_roles (
|
||||
user_id INTEGER NOT NULL,
|
||||
project_id INTEGER NOT NULL,
|
||||
p_role TEXT NOT NULL, -- 'admin' or 'member'
|
||||
p_role TEXT NOT NULL, -- 'project_manager' or 'member'
|
||||
FOREIGN KEY (user_id) REFERENCES users (id)
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id)
|
||||
FOREIGN KEY (p_role) REFERENCES project_role (p_role)
|
||||
|
|
Loading…
Reference in a new issue