Files
cpone_dashboard/cpone-dashboard/menu/projects/query.go
2026-04-30 14:27:01 +07:00

94 lines
2.3 KiB
Go

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)
}