diff --git a/backend/internal/database/db.go b/backend/internal/database/db.go index 59d3277..3f2d2f7 100644 --- a/backend/internal/database/db.go +++ b/backend/internal/database/db.go @@ -39,6 +39,9 @@ type Database interface { SignWeeklyReport(reportId int, projectManagerId int) error IsSiteAdmin(username string) (bool, error) IsProjectManager(username string, projectname string) (bool, error) + GetTotalTimePerActivity(projectName string) (map[string]int, error) + + } // This struct is a wrapper type that holds the database connection @@ -519,3 +522,41 @@ func (d *Db) MigrateSampleData() error { return nil } + +func (d *Db) GetTotalTimePerActivity(projectName string) (map[string]int, error) { + + query := ` + SELECT development_time, meeting_time, admin_time, own_work_time, study_time, testing_time + FROM weekly_reports + JOIN projects ON weekly_reports.project_id = projects.id + WHERE projects.name = ? + ` + + rows, err := d.DB.Query(query, projectName) + if err != nil { + return nil, err + } + defer rows.Close() + + totalTime := make(map[string]int) + + for rows.Next() { + var developmentTime, meetingTime, adminTime, ownWorkTime, studyTime, testingTime int + if err := rows.Scan(&developmentTime, &meetingTime, &adminTime, &ownWorkTime, &studyTime, &testingTime); err != nil { + return nil, err + } + + totalTime["development"] += developmentTime + totalTime["meeting"] += meetingTime + totalTime["admin"] += adminTime + totalTime["own_work"] += ownWorkTime + totalTime["study"] += studyTime + totalTime["testing"] += testingTime + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return totalTime, nil +} diff --git a/backend/internal/database/db_test.go b/backend/internal/database/db_test.go index 6757522..043b6d0 100644 --- a/backend/internal/database/db_test.go +++ b/backend/internal/database/db_test.go @@ -676,38 +676,23 @@ func TestIsProjectManager(t *testing.T) { } } -func TestChangeUserName(t *testing.T) { +func TestGetTotalTimePerActivity(t *testing.T) { + // Initialize your test database connection db, err := setupState() if err != nil { t.Error("setupState failed:", err) } - // Add a user - err = db.AddUser("testuser", "password") + // Run the query to get total time per activity + totalTime, err := db.GetTotalTimePerActivity("projecttest") if err != nil { - t.Error("AddUser failed:", err) + t.Error("GetTotalTimePerActivity failed:", err) } - // Change the user's name - err = db.ChangeUserName("testuser", "newname") - if err != nil { - t.Error("ChangeUserName failed:", err) + // Check if the totalTime map is not nil + if totalTime == nil { + t.Error("Expected non-nil totalTime map, got nil") } - // Retrieve the user's ID - userID, err := db.GetUserId("newname") - if err != nil { - t.Error("GetUserId failed:", err) - } - - // Ensure the user's ID matches the expected value - if userID != 1 { - t.Errorf("Expected user ID to be 1, got %d", userID) - } - - // Attempt to retrieve the user by the old name - _, err = db.GetUserId("testuser") - if err == nil { - t.Error("Expected GetUserId to fail for the old name, but it didn't") - } + // ska lägga till fler assertions }