package projects import ( "cpone-dashboard/db" "cpone-dashboard/menu/auth" "net/http" ) type ProjectItem struct { McuID int Label string CorporateName string Number string StartDate string EndDate string TotalParticipant int } func HasAccess(username string, mcuID int) (bool, error) { var count int err := db.DB.QueryRow(` SELECT COUNT(*) FROM dashboard_user_project up JOIN dashboard_user u ON u.User_ID = up.UserProj_UserID WHERE u.User_Username = ? AND up.UserProj_McuID = ? AND up.UserProj_IsActive = 'Y' `, username, mcuID).Scan(&count) return count > 0, err } func GetUserProjects(username string) ([]ProjectItem, error) { rows, err := db.DB.Query(` SELECT p.Mcu_ProjectMcuID, COALESCE(p.Mcu_ProjectLabel, ''), COALESCE(p.Mcu_ProjectCorporateName, ''), COALESCE(p.Mcu_ProjectNumber, ''), COALESCE(DATE_FORMAT(p.Mcu_ProjectStartDate, '%d/%m/%Y'), ''), COALESCE(DATE_FORMAT(p.Mcu_ProjectEndDate, '%d/%m/%Y'), ''), p.Mcu_ProjectTotalParticipant FROM dashboard_user_project up JOIN dashboard_user u ON u.User_ID = up.UserProj_UserID JOIN mcu_project p ON p.Mcu_ProjectMcuID = up.UserProj_McuID WHERE u.User_Username = ? AND up.UserProj_IsActive = 'Y' AND p.Mcu_ProjectIsActive = 'Y' ORDER BY p.Mcu_ProjectStartDate DESC `, username) if err != nil { return nil, err } defer rows.Close() var items []ProjectItem for rows.Next() { var item ProjectItem if err := rows.Scan( &item.McuID, &item.Label, &item.CorporateName, &item.Number, &item.StartDate, &item.EndDate, &item.TotalParticipant, ); err != nil { return nil, err } items = append(items, item) } return items, rows.Err() } func GetUserProject(username string, mcuID int) (ProjectItem, bool, error) { items, err := GetUserProjects(username) if err != nil { return ProjectItem{}, false, err } for _, item := range items { if item.McuID == mcuID { return item, true, nil } } return ProjectItem{}, false, nil } func ResolveCurrentProject(username string, r *http.Request) (ProjectItem, bool, error) { selectedID := auth.SelectedProjectID(r) if selectedID == 0 { return ProjectItem{}, false, nil } return GetUserProject(username, selectedID) }