RemoveUserFromProject handler implemented, corresponding TS api, untested
This commit is contained in:
		
							parent
							
								
									76ae587116
								
							
						
					
					
						commit
						e67c54540c
					
				
					 4 changed files with 82 additions and 0 deletions
				
			
		|  | @ -17,6 +17,7 @@ type Database interface { | ||||||
| 	AddUser(username string, password string) error | 	AddUser(username string, password string) error | ||||||
| 	CheckUser(username string, password string) bool | 	CheckUser(username string, password string) bool | ||||||
| 	RemoveUser(username string) error | 	RemoveUser(username string) error | ||||||
|  | 	RemoveUserFromProject(username string, projectname string) error | ||||||
| 	PromoteToAdmin(username string) error | 	PromoteToAdmin(username string) error | ||||||
| 	GetUserId(username string) (int, error) | 	GetUserId(username string) (int, error) | ||||||
| 	AddProject(name string, description string, username string) error | 	AddProject(name string, description string, username string) error | ||||||
|  | @ -86,6 +87,10 @@ const isProjectManagerQuery = `SELECT COUNT(*) > 0 FROM user_roles | ||||||
| 								JOIN projects ON user_roles.project_id = projects.id | 								JOIN projects ON user_roles.project_id = projects.id | ||||||
| 								WHERE users.username = ? AND projects.name = ? AND user_roles.p_role = 'project_manager'` | 								WHERE users.username = ? AND projects.name = ? AND user_roles.p_role = 'project_manager'` | ||||||
| 
 | 
 | ||||||
|  | const removeUserFromProjectQuery = `DELETE FROM user_roles  | ||||||
|  | 									WHERE user_id = (SELECT id FROM users WHERE username = ?)  | ||||||
|  | 									AND project_id = (SELECT id FROM projects WHERE name = ?)` | ||||||
|  | 
 | ||||||
| // DbConnect connects to the database | // DbConnect connects to the database | ||||||
| func DbConnect(dbpath string) Database { | func DbConnect(dbpath string) Database { | ||||||
| 	// Open the database | 	// Open the database | ||||||
|  | @ -147,6 +152,11 @@ func (d *Db) AddUserToProject(username string, projectname string, role string) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (d *Db) RemoveUserFromProject(username string, projectname string) error { | ||||||
|  | 	_, err := d.Exec(removeUserFromProjectQuery, username, projectname) | ||||||
|  | 	return err | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ChangeUserRole changes the role of a user within a project. | // ChangeUserRole changes the role of a user within a project. | ||||||
| func (d *Db) ChangeUserRole(username string, projectname string, role string) error { | func (d *Db) ChangeUserRole(username string, projectname string, role string) error { | ||||||
| 	// Execute the SQL query to change the user's role | 	// Execute the SQL query to change the user's role | ||||||
|  |  | ||||||
							
								
								
									
										40
									
								
								backend/internal/handlers/projects/RemoveUserFromProject.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								backend/internal/handlers/projects/RemoveUserFromProject.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | package projects | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	db "ttime/internal/database" | ||||||
|  | 
 | ||||||
|  | 	"github.com/gofiber/fiber/v2" | ||||||
|  | 	"github.com/gofiber/fiber/v2/log" | ||||||
|  | 	"github.com/golang-jwt/jwt/v5" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func RemoveUserFromProject(c *fiber.Ctx) error { | ||||||
|  | 	user := c.Locals("user").(*jwt.Token) | ||||||
|  | 	claims := user.Claims.(jwt.MapClaims) | ||||||
|  | 	pm_name := claims["name"].(string) | ||||||
|  | 
 | ||||||
|  | 	project := c.Params("projectName") | ||||||
|  | 	username := c.Query("userName") | ||||||
|  | 
 | ||||||
|  | 	// Check if the user is a project manager | ||||||
|  | 	isPM, err := db.GetDb(c).IsProjectManager(pm_name, project) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Info("Error checking if user is project manager:", err) | ||||||
|  | 		return c.Status(500).SendString(err.Error()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if !isPM { | ||||||
|  | 		log.Info("User: ", pm_name, " is not a project manager in project: ", project) | ||||||
|  | 		return c.Status(403).SendString("User is not a project manager") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Remove the user from the project | ||||||
|  | 	if err = db.GetDb(c).RemoveUserFromProject(username, project); err != nil { | ||||||
|  | 		log.Info("Error removing user from project:", err) | ||||||
|  | 		return c.Status(500).SendString(err.Error()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Return success message | ||||||
|  | 	log.Info("User : ", username, " removed from project: ", project) | ||||||
|  | 	return c.SendStatus(fiber.StatusOK) | ||||||
|  | } | ||||||
|  | @ -121,6 +121,7 @@ func main() { | ||||||
| 	api.Post("/ProjectRoleChange", projects.ProjectRoleChange) | 	api.Post("/ProjectRoleChange", projects.ProjectRoleChange) | ||||||
| 	api.Put("/promoteToPm/:projectName", projects.PromoteToPm) | 	api.Put("/promoteToPm/:projectName", projects.PromoteToPm) | ||||||
| 	api.Put("/addUserToProject/:projectName", projects.AddUserToProjectHandler) | 	api.Put("/addUserToProject/:projectName", projects.AddUserToProjectHandler) | ||||||
|  | 	api.Delete("/removeUserFromProject/:projectName", projects.RemoveUserFromProject) | ||||||
| 	api.Delete("/removeProject/:projectName", projects.RemoveProject) | 	api.Delete("/removeProject/:projectName", projects.RemoveProject) | ||||||
| 	api.Delete("/project/:projectID", projects.DeleteProject) | 	api.Delete("/project/:projectID", projects.DeleteProject) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -201,6 +201,12 @@ interface API { | ||||||
|     token: string, |     token: string, | ||||||
|   ): Promise<APIResponse<void>>; |   ): Promise<APIResponse<void>>; | ||||||
| 
 | 
 | ||||||
|  |   removeUserFromProject( | ||||||
|  |     user: string, | ||||||
|  |     project: string, | ||||||
|  |     token: string, | ||||||
|  |   ): Promise<APIResponse<void>>; | ||||||
|  | 
 | ||||||
|   removeProject( |   removeProject( | ||||||
|     projectName: string, |     projectName: string, | ||||||
|     token: string, |     token: string, | ||||||
|  | @ -359,6 +365,31 @@ export const api: API = { | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|  |   async removeUserFromProject( | ||||||
|  |     user: string, | ||||||
|  |     project: string, | ||||||
|  |     token: string, | ||||||
|  |   ): Promise<APIResponse<void>> { | ||||||
|  |     try { | ||||||
|  |       const response = await fetch( | ||||||
|  |         `/api/removeUserFromProject/${project}?userName=${user}`, | ||||||
|  |         { | ||||||
|  |           method: "DELETE", | ||||||
|  |           headers: { | ||||||
|  |             "Content-Type": "application/json", | ||||||
|  |             Authorization: "Bearer " + token, | ||||||
|  |           }, | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |       if (!response.ok) { | ||||||
|  |         return { success: false, message: "Failed to remove member" }; | ||||||
|  |       } | ||||||
|  |     } catch (e) { | ||||||
|  |       return { success: false, message: "Failed to remove member" }; | ||||||
|  |     } | ||||||
|  |     return { success: true, message: "Removed member" }; | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|   async renewToken(token: string): Promise<APIResponse<string>> { |   async renewToken(token: string): Promise<APIResponse<string>> { | ||||||
|     try { |     try { | ||||||
|       const response = await fetch("/api/loginrenew", { |       const response = await fetch("/api/loginrenew", { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus