Co-authored-by: al8763be <al8763be@users.noreply.github.com>
This commit is contained in:
parent
e1b410c850
commit
d4cc556366
8 changed files with 155 additions and 4 deletions
|
@ -41,6 +41,7 @@ type Database interface {
|
|||
IsProjectManager(username string, projectname string) (bool, error)
|
||||
GetProjectTimes(projectName string) (map[string]int, error)
|
||||
UpdateWeeklyReport(projectName string, userName string, week int, developmentTime int, meetingTime int, adminTime int, ownWorkTime int, studyTime int, testingTime int) error
|
||||
RemoveProject(projectname string) error
|
||||
}
|
||||
|
||||
// This struct is a wrapper type that holds the database connection
|
||||
|
@ -549,3 +550,8 @@ func (d *Db) GetProjectTimes(projectName string) (map[string]int, error) {
|
|||
|
||||
return totalTime, nil
|
||||
}
|
||||
|
||||
func (d *Db) RemoveProject(projectname string) error {
|
||||
_, err := d.Exec("DELETE FROM projects WHERE name = ?", projectname)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -894,3 +894,33 @@ func TestUpdateWeeklyReport(t *testing.T) {
|
|||
t.Error("UpdateWeeklyReport failed: report not updated correctly")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveProject(t *testing.T) {
|
||||
db, err := setupAdvancedState()
|
||||
if err != nil {
|
||||
t.Error("setupState failed:", err)
|
||||
}
|
||||
|
||||
// Promote user to Admin
|
||||
err = db.PromoteToAdmin("demouser")
|
||||
if err != nil {
|
||||
t.Error("PromoteToAdmin failed:", err)
|
||||
}
|
||||
|
||||
// Remove project
|
||||
err = db.RemoveProject("projecttest")
|
||||
if err != nil {
|
||||
t.Error("RemoveProject failed:", err)
|
||||
}
|
||||
|
||||
// Check if the project was removed
|
||||
projects, err := db.GetAllProjects()
|
||||
if err != nil {
|
||||
t.Error("GetAllProjects failed:", err)
|
||||
}
|
||||
if len(projects) != 0 {
|
||||
t.Error("RemoveProject failed: expected 0, got", len(projects))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -29,6 +29,7 @@ type GlobalState interface {
|
|||
ChangeUserName(c *fiber.Ctx) error // WIP
|
||||
GetAllUsersProject(c *fiber.Ctx) error // WIP
|
||||
UpdateWeeklyReport(c *fiber.Ctx) error
|
||||
RemoveProject(c *fiber.Ctx) error
|
||||
}
|
||||
|
||||
// "Constructor"
|
||||
|
|
|
@ -286,4 +286,30 @@ func (gs *GState) GetProjectTimesHandler(c *fiber.Ctx) error {
|
|||
// Return project times as JSON
|
||||
log.Info("Returning project times for project:", projectName)
|
||||
return c.JSON(projectTimes)
|
||||
}
|
||||
|
||||
func (gs *GState) RemoveProject(c *fiber.Ctx) error {
|
||||
user := c.Locals("user").(*jwt.Token)
|
||||
claims := user.Claims.(jwt.MapClaims)
|
||||
username := claims["name"].(string)
|
||||
|
||||
// Check if the user is a site admin
|
||||
isAdmin, err := gs.Db.IsSiteAdmin(username)
|
||||
if err != nil {
|
||||
log.Info("Error checking admin status:", err)
|
||||
return c.Status(500).SendString(err.Error())
|
||||
}
|
||||
|
||||
if !isAdmin {
|
||||
log.Info("User is not a site admin:", username)
|
||||
return c.Status(403).SendString("User is not a site admin")
|
||||
}
|
||||
|
||||
projectName := c.Params("projectName")
|
||||
|
||||
if err := gs.Db.RemoveProject(projectName); err != nil {
|
||||
return c.Status(500).SendString((err.Error()))
|
||||
}
|
||||
|
||||
return c.Status(200).SendString("Project deleted")
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue