107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package queries
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
)
|
|
|
|
// ========================================================
|
|
// 📌 GetUserList — POSTGRES FINAL (mk_dfusr)
|
|
// ========================================================
|
|
func GetUserList(db *sql.DB, search string) (*sql.Rows, error) {
|
|
|
|
baseQuery := `
|
|
SELECT
|
|
u.id AS id, -- 1
|
|
u.username AS code, -- 2 (frontend uyumu için alias)
|
|
u.is_active AS is_active, -- 3
|
|
|
|
-- Nebim eşleşmesi (opsiyonel)
|
|
n.username AS nebim_username, -- 4
|
|
n.user_group_code AS user_group_code, -- 5
|
|
|
|
-- Roller
|
|
COALESCE(string_agg(DISTINCT r.code, ', '), '') AS role_names, -- 6
|
|
|
|
-- Departmanlar
|
|
COALESCE(string_agg(DISTINCT d.title, ', '), '') AS department_names, -- 7
|
|
|
|
-- Piyasalar (ÇOKLU)
|
|
COALESCE(string_agg(DISTINCT p.title, ', '), '') AS piyasa_names -- 8
|
|
|
|
FROM mk_dfusr u
|
|
|
|
-- ==========================
|
|
-- 🔗 Nebim eşleşmesi
|
|
-- ==========================
|
|
LEFT JOIN dfusr_nebim_user un
|
|
ON un.dfusr_id = u.id
|
|
|
|
LEFT JOIN mk_nebim_user n
|
|
ON n.id = un.mk_nebim_user_id
|
|
|
|
-- ==========================
|
|
-- 🔐 Roller
|
|
-- ==========================
|
|
LEFT JOIN dfrole_usr uru
|
|
ON uru.dfusr_id = u.id
|
|
|
|
LEFT JOIN dfrole r
|
|
ON r.id = uru.dfrole_id
|
|
|
|
-- ==========================
|
|
-- 🏢 Departmanlar
|
|
-- ==========================
|
|
LEFT JOIN dfusr_dprt ud
|
|
ON ud.dfusr_id = u.id
|
|
|
|
LEFT JOIN mk_dprt d
|
|
ON d.id = ud.dprt_id
|
|
|
|
-- ==========================
|
|
-- 🌍 Piyasalar
|
|
-- ==========================
|
|
LEFT JOIN dfusr_piyasa up
|
|
ON up.dfusr_id = u.id
|
|
|
|
LEFT JOIN mk_sales_piy p
|
|
ON p.code = up.piyasa_code
|
|
|
|
WHERE 1 = 1
|
|
`
|
|
|
|
// 🔍 SEARCH FILTER
|
|
if search != "" {
|
|
baseQuery += `
|
|
AND (
|
|
u.username ILIKE $1
|
|
OR u.email ILIKE $1
|
|
OR n.username ILIKE $1
|
|
OR r.code ILIKE $1
|
|
OR d.title ILIKE $1
|
|
OR p.title ILIKE $1
|
|
)
|
|
`
|
|
}
|
|
|
|
// 📌 GROUP + ORDER
|
|
baseQuery += `
|
|
GROUP BY
|
|
u.id,
|
|
u.username,
|
|
u.is_active,
|
|
n.username,
|
|
n.user_group_code
|
|
|
|
ORDER BY u.username
|
|
`
|
|
|
|
// ▶ EXECUTE QUERY
|
|
if search != "" {
|
|
searchLike := fmt.Sprintf("%%%s%%", search)
|
|
return db.Query(baseQuery, searchLike)
|
|
}
|
|
|
|
return db.Query(baseQuery)
|
|
}
|