Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -22,7 +22,7 @@ UI_DIR=/opt/bssapp/ui/dist
|
||||
# DATABASES
|
||||
# ===============================
|
||||
POSTGRES_CONN=host=46.224.33.150 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable
|
||||
MSSQL_CONN=sqlserver://sa:Gil_0150@100.127.186.137:1433?database=BAGGI_V3&encrypt=disable
|
||||
MSSQL_CONN=sqlserver://sa:Gil_0150@10.0.0.9:1433?database=BAGGI_V3&encrypt=disable
|
||||
|
||||
# ===============================
|
||||
# PDF
|
||||
|
||||
@@ -3,7 +3,6 @@ package db
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
@@ -13,23 +12,24 @@ import (
|
||||
var MssqlDB *sql.DB
|
||||
|
||||
// ConnectMSSQL MSSQL baglantisini ortam degiskeninden baslatir.
|
||||
func ConnectMSSQL() {
|
||||
func ConnectMSSQL() error {
|
||||
connString := strings.TrimSpace(os.Getenv("MSSQL_CONN"))
|
||||
if connString == "" {
|
||||
log.Fatal("MSSQL_CONN tanımlı değil")
|
||||
return fmt.Errorf("MSSQL_CONN tanımlı değil")
|
||||
}
|
||||
|
||||
var err error
|
||||
MssqlDB, err = sql.Open("sqlserver", connString)
|
||||
if err != nil {
|
||||
log.Fatal("MSSQL bağlantı hatası:", err)
|
||||
return fmt.Errorf("MSSQL bağlantı hatası: %w", err)
|
||||
}
|
||||
|
||||
if err = MssqlDB.Ping(); err != nil {
|
||||
log.Fatal("MSSQL erişilemiyor:", err)
|
||||
return fmt.Errorf("MSSQL erişilemiyor: %w", err)
|
||||
}
|
||||
|
||||
fmt.Println("MSSQL bağlantısı başarılı")
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetDB() *sql.DB {
|
||||
|
||||
17
svc/main.go
17
svc/main.go
@@ -425,6 +425,12 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
||||
wrapV3(routes.ExportStatementHeaderReportPDFHandler(mssql)),
|
||||
)
|
||||
|
||||
bindV3(r, pgDB,
|
||||
"/api/finance/customer-balances", "GET",
|
||||
"finance", "view",
|
||||
wrapV3(http.HandlerFunc(routes.GetCustomerBalanceListHandler)),
|
||||
)
|
||||
|
||||
// ============================================================
|
||||
// REPORT (STATEMENTS)
|
||||
// ============================================================
|
||||
@@ -576,6 +582,7 @@ func main() {
|
||||
// -------------------------------------------------------
|
||||
// 🔑 ENV
|
||||
// -------------------------------------------------------
|
||||
// Önce .env + mail.env yükle. MSSQL başarısızsa .env.local dene.
|
||||
if err := godotenv.Load(".env", "mail.env"); err != nil {
|
||||
log.Println("⚠️ .env / mail.env bulunamadı")
|
||||
}
|
||||
@@ -589,7 +596,15 @@ func main() {
|
||||
// -------------------------------------------------------
|
||||
// 🔗 DATABASE
|
||||
// -------------------------------------------------------
|
||||
db.ConnectMSSQL()
|
||||
if err := db.ConnectMSSQL(); err != nil {
|
||||
log.Println("⚠️ MSSQL ilk deneme başarısız:", err)
|
||||
if err2 := godotenv.Overload(".env.local"); err2 != nil {
|
||||
log.Println("⚠️ .env.local bulunamadı")
|
||||
}
|
||||
if err3 := db.ConnectMSSQL(); err3 != nil {
|
||||
log.Fatal(err3)
|
||||
}
|
||||
}
|
||||
|
||||
pgDB, err := db.ConnectPostgres()
|
||||
if err != nil {
|
||||
|
||||
36
svc/models/customer_balance_list.go
Normal file
36
svc/models/customer_balance_list.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package models
|
||||
|
||||
type CustomerBalanceListParams struct {
|
||||
SelectedDate string
|
||||
CariSearch string
|
||||
CariIlkGrup string
|
||||
Piyasa string
|
||||
Temsilci string
|
||||
RiskDurumu string
|
||||
IslemTipi string
|
||||
Ulke string
|
||||
}
|
||||
|
||||
type CustomerBalanceListRow struct {
|
||||
CariIlkGrup string `json:"cari_ilk_grup"`
|
||||
Piyasa string `json:"piyasa"`
|
||||
Temsilci string `json:"temsilci"`
|
||||
Sirket string `json:"sirket"`
|
||||
AnaCariKodu string `json:"ana_cari_kodu"`
|
||||
AnaCariAdi string `json:"ana_cari_adi"`
|
||||
CariKodu string `json:"cari_kodu"`
|
||||
CariDetay string `json:"cari_detay"`
|
||||
Ozellik03 string `json:"ozellik03"`
|
||||
Ozellik05 string `json:"ozellik05"`
|
||||
Ozellik06 string `json:"ozellik06"`
|
||||
Ozellik07 string `json:"ozellik07"`
|
||||
CariDoviz string `json:"cari_doviz"`
|
||||
Bakiye12 float64 `json:"bakiye_1_2"`
|
||||
TLBakiye12 float64 `json:"tl_bakiye_1_2"`
|
||||
USDBakiye12 float64 `json:"usd_bakiye_1_2"`
|
||||
Bakiye13 float64 `json:"bakiye_1_3"`
|
||||
TLBakiye13 float64 `json:"tl_bakiye_1_3"`
|
||||
USDBakiye13 float64 `json:"usd_bakiye_1_3"`
|
||||
HesapAlinmayanGun NullInt32 `json:"hesap_alinmayan_gun"`
|
||||
KalanFaturaOrtalamaVadeTarihi NullString `json:"kalan_fatura_ortalama_vade_tarihi"`
|
||||
}
|
||||
200
svc/queries/customer_balance_list.go
Normal file
200
svc/queries/customer_balance_list.go
Normal file
@@ -0,0 +1,200 @@
|
||||
package queries
|
||||
|
||||
import (
|
||||
"bssapp-backend/db"
|
||||
"bssapp-backend/internal/authz"
|
||||
"bssapp-backend/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func GetCustomerBalanceList(ctx context.Context, params models.CustomerBalanceListParams) ([]models.CustomerBalanceListRow, error) {
|
||||
// AuthZ bazli piyasa filtresi
|
||||
piyasaFilter := authz.BuildMSSQLPiyasaFilter(ctx, "D.Ozellik01")
|
||||
if strings.TrimSpace(piyasaFilter) == "" {
|
||||
piyasaFilter = "1=1"
|
||||
}
|
||||
|
||||
// Dinamik WHERE insa et
|
||||
where := make([]string, 0, 16)
|
||||
where = append(where, "D.Islem_Tarihi < DATEADD(DAY, 1, @SecilenTarih)")
|
||||
where = append(where, piyasaFilter)
|
||||
|
||||
if params.CariIlkGrup != "" {
|
||||
where = append(where, "D.Ozellik08 = @CariIlkGrup")
|
||||
}
|
||||
if params.Piyasa != "" {
|
||||
where = append(where, "D.Ozellik01 = @Piyasa")
|
||||
}
|
||||
if params.Temsilci != "" {
|
||||
where = append(where, "COALESCE(NULLIF(D.Ozellik02, ''), D.Ozellik09) = @Temsilci")
|
||||
}
|
||||
if params.RiskDurumu != "" {
|
||||
where = append(where, "D.Ozellik03 = @RiskDurumu")
|
||||
}
|
||||
if params.IslemTipi != "" {
|
||||
where = append(where, "D.PislemTipi = @IslemTipi")
|
||||
}
|
||||
if params.Ulke != "" {
|
||||
where = append(where, "D.Ozellik05 = @Ulke")
|
||||
}
|
||||
whereSQL := strings.Join(where, "\n AND ")
|
||||
cariSearchLike := "%" + strings.TrimSpace(params.CariSearch) + "%"
|
||||
outerWhere := "1=1"
|
||||
if strings.TrimSpace(params.CariSearch) != "" {
|
||||
outerWhere = `(LEFT(B.CariKodu, 8) COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR B.CariKodu COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR B.CariDetay COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR AC.ANA_CARI_ADI COLLATE Turkish_100_CI_AI LIKE @CariSearchLike)`
|
||||
}
|
||||
|
||||
const queryTemplate = `
|
||||
;WITH CTE_ANA_CARI AS (
|
||||
SELECT
|
||||
ANA_CARI_KODU = LEFT(CariKodu, 8),
|
||||
CariDetay,
|
||||
rn = ROW_NUMBER() OVER (
|
||||
PARTITION BY LEFT(CariKodu, 8)
|
||||
ORDER BY CariKodu
|
||||
)
|
||||
FROM dbo.MK_CARI_ILETISIM WITH (NOLOCK)
|
||||
),
|
||||
ANA_CARI AS (
|
||||
SELECT
|
||||
ANA_CARI_KODU,
|
||||
CariDetay AS ANA_CARI_ADI
|
||||
FROM CTE_ANA_CARI
|
||||
WHERE rn = 1
|
||||
),
|
||||
BASE AS (
|
||||
SELECT
|
||||
D.SirketKodu,
|
||||
D.SirketDetay,
|
||||
D.CariKodu,
|
||||
D.CariDetay,
|
||||
D.CariDoviz,
|
||||
D.Ozellik01,
|
||||
D.Ozellik02,
|
||||
D.Ozellik03,
|
||||
D.Ozellik05,
|
||||
D.Ozellik06,
|
||||
D.Ozellik07,
|
||||
D.Ozellik08,
|
||||
D.Ozellik09,
|
||||
D.PislemTipi,
|
||||
D.Bakiye,
|
||||
D.KurBakiye,
|
||||
D.Son_Guncel_Kur
|
||||
FROM dbo.DENEME02DENEME AS D WITH (NOLOCK)
|
||||
WHERE %s
|
||||
)
|
||||
SELECT
|
||||
B.Ozellik08 AS CARI_ILK_GRUP,
|
||||
B.Ozellik01 AS PIYASA,
|
||||
COALESCE(NULLIF(B.Ozellik02, ''), B.Ozellik09) AS Temsilci,
|
||||
LEFT(B.SirketDetay, 10) AS Sirket,
|
||||
LEFT(B.CariKodu, 8) AS ANA_CARI_KODU,
|
||||
AC.ANA_CARI_ADI,
|
||||
B.CariKodu,
|
||||
B.CariDetay,
|
||||
B.Ozellik03,
|
||||
B.Ozellik05,
|
||||
B.Ozellik06,
|
||||
B.Ozellik07,
|
||||
B.CariDoviz,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.Bakiye, 0) ELSE 0 END), 0) AS Bakiye_1_2,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END), 0) AS TL_Bakiye_1_2,
|
||||
ISNULL(
|
||||
SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END) / NULLIF(MIN(B.Son_Guncel_Kur), 0),
|
||||
0
|
||||
) AS USD_Bakiye_1_2,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.Bakiye, 0) ELSE 0 END), 0) AS Bakiye_1_3,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END), 0) AS TL_Bakiye_1_3,
|
||||
ISNULL(
|
||||
SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END) / NULLIF(MIN(B.Son_Guncel_Kur), 0),
|
||||
0
|
||||
) AS USD_Bakiye_1_3,
|
||||
CAST(NULL AS int) AS Hesap_Alinmayan_Gun,
|
||||
CAST(NULL AS varchar(32)) AS Kalan_Fatura_Ortalama_Vade_Tarihi
|
||||
FROM BASE AS B
|
||||
LEFT JOIN ANA_CARI AS AC
|
||||
ON AC.ANA_CARI_KODU = LEFT(B.CariKodu, 8)
|
||||
WHERE %s
|
||||
GROUP BY
|
||||
B.Ozellik08,
|
||||
B.Ozellik01,
|
||||
COALESCE(NULLIF(B.Ozellik02, ''), B.Ozellik09),
|
||||
LEFT(B.SirketDetay, 10),
|
||||
LEFT(B.CariKodu, 8),
|
||||
AC.ANA_CARI_ADI,
|
||||
B.CariKodu,
|
||||
B.CariDetay,
|
||||
B.Ozellik03,
|
||||
B.Ozellik05,
|
||||
B.Ozellik06,
|
||||
B.Ozellik07,
|
||||
B.CariDoviz
|
||||
ORDER BY
|
||||
LEFT(B.SirketDetay, 10),
|
||||
B.CariKodu
|
||||
OPTION (RECOMPILE);
|
||||
`
|
||||
query := fmt.Sprintf(queryTemplate, whereSQL, outerWhere)
|
||||
|
||||
rows, err := db.MssqlDB.QueryContext(
|
||||
ctx,
|
||||
query,
|
||||
sql.Named("SecilenTarih", params.SelectedDate),
|
||||
sql.Named("CariIlkGrup", params.CariIlkGrup),
|
||||
sql.Named("Piyasa", params.Piyasa),
|
||||
sql.Named("Temsilci", params.Temsilci),
|
||||
sql.Named("RiskDurumu", params.RiskDurumu),
|
||||
sql.Named("IslemTipi", params.IslemTipi),
|
||||
sql.Named("Ulke", params.Ulke),
|
||||
sql.Named("CariSearchLike", cariSearchLike),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("MSSQL query error: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
out := make([]models.CustomerBalanceListRow, 0, 512)
|
||||
|
||||
for rows.Next() {
|
||||
var r models.CustomerBalanceListRow
|
||||
if err := rows.Scan(
|
||||
&r.CariIlkGrup,
|
||||
&r.Piyasa,
|
||||
&r.Temsilci,
|
||||
&r.Sirket,
|
||||
&r.AnaCariKodu,
|
||||
&r.AnaCariAdi,
|
||||
&r.CariKodu,
|
||||
&r.CariDetay,
|
||||
&r.Ozellik03,
|
||||
&r.Ozellik05,
|
||||
&r.Ozellik06,
|
||||
&r.Ozellik07,
|
||||
&r.CariDoviz,
|
||||
&r.Bakiye12,
|
||||
&r.TLBakiye12,
|
||||
&r.USDBakiye12,
|
||||
&r.Bakiye13,
|
||||
&r.TLBakiye13,
|
||||
&r.USDBakiye13,
|
||||
&r.HesapAlinmayanGun,
|
||||
&r.KalanFaturaOrtalamaVadeTarihi,
|
||||
); err != nil {
|
||||
return nil, fmt.Errorf("row scan error: %w", err)
|
||||
}
|
||||
out = append(out, r)
|
||||
}
|
||||
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("rows iteration error: %w", err)
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
49
svc/routes/customer_balance_list.go
Normal file
49
svc/routes/customer_balance_list.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"bssapp-backend/auth"
|
||||
"bssapp-backend/models"
|
||||
"bssapp-backend/queries"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// GET /api/finance/customer-balances
|
||||
func GetCustomerBalanceListHandler(w http.ResponseWriter, r *http.Request) {
|
||||
claims, ok := auth.GetClaimsFromContext(r.Context())
|
||||
if !ok || claims == nil {
|
||||
http.Error(w, "unauthorized", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
selectedDate := strings.TrimSpace(r.URL.Query().Get("selected_date"))
|
||||
if selectedDate == "" {
|
||||
selectedDate = time.Now().Format("2006-01-02")
|
||||
}
|
||||
|
||||
params := models.CustomerBalanceListParams{
|
||||
SelectedDate: selectedDate,
|
||||
CariSearch: strings.TrimSpace(r.URL.Query().Get("cari_search")),
|
||||
CariIlkGrup: strings.TrimSpace(r.URL.Query().Get("cari_ilk_grup")),
|
||||
Piyasa: strings.TrimSpace(r.URL.Query().Get("piyasa")),
|
||||
Temsilci: strings.TrimSpace(r.URL.Query().Get("temsilci")),
|
||||
RiskDurumu: strings.TrimSpace(r.URL.Query().Get("risk_durumu")),
|
||||
IslemTipi: strings.TrimSpace(r.URL.Query().Get("islem_tipi")),
|
||||
Ulke: strings.TrimSpace(r.URL.Query().Get("ulke")),
|
||||
}
|
||||
|
||||
rows, err := queries.GetCustomerBalanceList(r.Context(), params)
|
||||
if err != nil {
|
||||
log.Println("GetCustomerBalanceList error:", err)
|
||||
http.Error(w, "db error: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
if err := json.NewEncoder(w).Encode(rows); err != nil {
|
||||
log.Println("GetCustomerBalanceList json encode error:", err)
|
||||
}
|
||||
}
|
||||
137
svc/run.log
Normal file
137
svc/run.log
Normal file
@@ -0,0 +1,137 @@
|
||||
2026/02/23 12:29:31 🔥🔥🔥 BSSAPP BACKEND STARTED — LOGIN ROUTE SHOULD EXIST 🔥🔥🔥
|
||||
2026/02/23 12:29:31 🔐 JWT_SECRET yüklendi
|
||||
MSSQL bağlantısı başarılı
|
||||
2026/02/23 12:29:31 PostgreSQL bağlantısı başarılı
|
||||
2026/02/23 12:29:31 ✅ Admin dept permissions seeded
|
||||
2026/02/23 12:29:31 🟢 auditlog Init called, buffer: 1000
|
||||
2026/02/23 12:29:31 🕵️ AuditLog sistemi başlatıldı (buffer=1000)
|
||||
2026/02/23 12:29:31 ✉️ Graph Mailer hazır (App-only token) | from=baggiss@baggi.com.tr
|
||||
2026/02/23 12:29:31 ✉️ Graph Mailer hazır
|
||||
2026/02/23 12:29:31 🟢 auditlog worker STARTED
|
||||
📋 [DEBUG] İlk 10 kullanıcı:
|
||||
- 1 : ctengiz
|
||||
- 2 : ali.kale
|
||||
- 5 : mehmet.keçeci
|
||||
- 6 : mert.keçeci
|
||||
- 7 : samet.keçeci
|
||||
- 9 : orhan.caliskan
|
||||
- 10 : nilgun.sara
|
||||
- 14 : rustem.kurbanov
|
||||
- 15 : caner.akyol
|
||||
- 16 : kemal.matyakupov
|
||||
2026/02/23 12:29:32 ✅ Route+Perm registered → POST /api/auth/login [auth:login]
|
||||
2026/02/23 12:29:32 ✅ Route+Perm registered → POST /api/auth/refresh [auth:refresh]
|
||||
2026/02/23 12:29:32 ✅ Route+Perm registered → POST /api/password/forgot [auth:update]
|
||||
2026/02/23 12:29:33 ✅ Route+Perm registered → GET /api/password/reset/validate/{token} [auth:view]
|
||||
2026/02/23 12:29:33 ✅ Route+Perm registered → POST /api/password/reset [auth:update]
|
||||
2026/02/23 12:29:34 ✅ Route+Perm registered → POST /api/password/change [auth:update]
|
||||
2026/02/23 12:29:34 ✅ Route+Perm registered → GET /api/activity-logs [system:read]
|
||||
2026/02/23 12:29:35 ✅ Route+Perm registered → POST /api/test-mail [system:update]
|
||||
2026/02/23 12:29:35 ✅ Route+Perm registered → GET /api/roles/{id}/permissions [system:update]
|
||||
2026/02/23 12:29:36 ✅ Route+Perm registered → POST /api/roles/{id}/permissions [system:update]
|
||||
2026/02/23 12:29:36 ✅ Route+Perm registered → GET /api/users/{id}/permissions [system:update]
|
||||
2026/02/23 12:29:36 ✅ Route+Perm registered → POST /api/users/{id}/permissions [system:update]
|
||||
2026/02/23 12:29:37 ✅ Route+Perm registered → GET /api/permissions/routes [system:view]
|
||||
2026/02/23 12:29:37 ✅ Route+Perm registered → GET /api/permissions/effective [system:view]
|
||||
2026/02/23 12:29:38 ✅ Route+Perm registered → GET /api/permissions/matrix [system:view]
|
||||
2026/02/23 12:29:38 ✅ Route+Perm registered → GET /api/role-dept-permissions/list [system:update]
|
||||
2026/02/23 12:29:38 ✅ Route+Perm registered → GET /api/roles/{roleId}/departments/{deptCode}/permissions [system:update]
|
||||
2026/02/23 12:29:39 ✅ Route+Perm registered → POST /api/roles/{roleId}/departments/{deptCode}/permissions [system:update]
|
||||
2026/02/23 12:29:39 ✅ Route+Perm registered → GET /api/users/list [user:view]
|
||||
2026/02/23 12:29:40 ✅ Route+Perm registered → POST /api/users [user:insert]
|
||||
2026/02/23 12:29:40 ✅ Route+Perm registered → GET /api/users/{id} [user:update]
|
||||
2026/02/23 12:29:41 ✅ Route+Perm registered → PUT /api/users/{id} [user:update]
|
||||
2026/02/23 12:29:41 ✅ Route+Perm registered → DELETE /api/users/{id} [user:delete]
|
||||
2026/02/23 12:29:41 ✅ Route+Perm registered → POST /api/users/{id}/admin-reset-password [user:update]
|
||||
2026/02/23 12:29:42 ✅ Route+Perm registered → POST /api/users/{id}/send-password-mail [user:update]
|
||||
2026/02/23 12:29:42 ✅ Route+Perm registered → POST /api/users/create [user:insert]
|
||||
2026/02/23 12:29:43 ✅ Route+Perm registered → GET /api/lookups/users-perm [user:view]
|
||||
2026/02/23 12:29:43 ✅ Route+Perm registered → GET /api/lookups/roles-perm [user:view]
|
||||
2026/02/23 12:29:43 ✅ Route+Perm registered → GET /api/lookups/departments-perm [user:view]
|
||||
2026/02/23 12:29:44 ✅ Route+Perm registered → GET /api/lookups/modules [user:view]
|
||||
2026/02/23 12:29:44 ✅ Route+Perm registered → GET /api/lookups/roles [user:view]
|
||||
2026/02/23 12:29:45 ✅ Route+Perm registered → GET /api/lookups/departments [user:view]
|
||||
2026/02/23 12:29:45 ✅ Route+Perm registered → GET /api/lookups/nebim-users [user:view]
|
||||
2026/02/23 12:29:46 ✅ Route+Perm registered → GET /api/lookups/piyasalar [user:view]
|
||||
2026/02/23 12:29:46 ✅ Route+Perm registered → GET /api/accounts [customer:view]
|
||||
2026/02/23 12:29:46 ✅ Route+Perm registered → GET /api/customer-list [customer:view]
|
||||
2026/02/23 12:29:47 ✅ Route+Perm registered → GET /api/today-currency [finance:view]
|
||||
2026/02/23 12:29:47 ✅ Route+Perm registered → GET /api/export-pdf [finance:export]
|
||||
2026/02/23 12:29:48 ✅ Route+Perm registered → GET /api/exportstamentheaderreport-pdf [finance:export]
|
||||
2026/02/23 12:29:48 ✅ Route+Perm registered → GET /api/finance/customer-balances [finance:view]
|
||||
2026/02/23 12:29:48 ✅ Route+Perm registered → GET /api/statements [finance:view]
|
||||
2026/02/23 12:29:49 ✅ Route+Perm registered → GET /api/statements/{id}/details [finance:view]
|
||||
2026/02/23 12:29:49 ✅ Route+Perm registered → POST /api/order/create [order:insert]
|
||||
2026/02/23 12:29:50 ✅ Route+Perm registered → POST /api/order/update [order:update]
|
||||
2026/02/23 12:29:50 ✅ Route+Perm registered → GET /api/order/get/{id} [order:view]
|
||||
2026/02/23 12:29:51 ✅ Route+Perm registered → GET /api/orders/list [order:view]
|
||||
2026/02/23 12:29:51 ✅ Route+Perm registered → GET /api/orders/production-list [order:update]
|
||||
2026/02/23 12:29:51 ✅ Route+Perm registered → GET /api/orders/production-items/{id} [order:view]
|
||||
2026/02/23 12:29:52 ✅ Route+Perm registered → POST /api/orders/production-items/{id}/insert-missing [order:update]
|
||||
2026/02/23 12:29:52 ✅ Route+Perm registered → POST /api/orders/production-items/{id}/validate [order:update]
|
||||
2026/02/23 12:29:53 ✅ Route+Perm registered → POST /api/orders/production-items/{id}/apply [order:update]
|
||||
2026/02/23 12:29:53 ✅ Route+Perm registered → GET /api/orders/close-ready [order:update]
|
||||
2026/02/23 12:29:54 ✅ Route+Perm registered → POST /api/orders/bulk-close [order:update]
|
||||
2026/02/23 12:29:54 ✅ Route+Perm registered → GET /api/orders/export [order:export]
|
||||
2026/02/23 12:29:54 ✅ Route+Perm registered → GET /api/order/check/{id} [order:view]
|
||||
2026/02/23 12:29:55 ✅ Route+Perm registered → POST /api/order/validate [order:insert]
|
||||
2026/02/23 12:29:55 ✅ Route+Perm registered → GET /api/order/pdf/{id} [order:export]
|
||||
2026/02/23 12:29:56 ✅ Route+Perm registered → GET /api/order-inventory [order:view]
|
||||
2026/02/23 12:29:56 ✅ Route+Perm registered → GET /api/orderpricelistb2b [order:view]
|
||||
2026/02/23 12:29:57 ✅ Route+Perm registered → GET /api/min-price [order:view]
|
||||
2026/02/23 12:29:57 ✅ Route+Perm registered → GET /api/products [order:view]
|
||||
2026/02/23 12:29:57 ✅ Route+Perm registered → GET /api/product-detail [order:view]
|
||||
2026/02/23 12:29:58 ✅ Route+Perm registered → GET /api/product-colors [order:view]
|
||||
2026/02/23 12:29:58 ✅ Route+Perm registered → GET /api/product-colorsize [order:view]
|
||||
2026/02/23 12:29:59 ✅ Route+Perm registered → GET /api/product-secondcolor [order:view]
|
||||
2026/02/23 12:29:59 ✅ Route+Perm registered → GET /api/roles [user:view]
|
||||
2026/02/23 12:29:59 ✅ Route+Perm registered → GET /api/departments [user:view]
|
||||
2026/02/23 12:30:00 ✅ Route+Perm registered → GET /api/piyasalar [user:view]
|
||||
2026/02/23 12:30:01 ✅ Route+Perm registered → POST /api/roles/{id}/departments [user:update]
|
||||
2026/02/23 12:30:01 ✅ Route+Perm registered → POST /api/roles/{id}/piyasalar [user:update]
|
||||
2026/02/23 12:30:01 ✅ Route+Perm registered → POST /api/users/{id}/roles [user:update]
|
||||
2026/02/23 12:30:02 ✅ Route+Perm registered → POST /api/admin/users/{id}/piyasa-sync [admin:user.update]
|
||||
2026/02/23 12:30:02 🌍 CORS Allowed Origin: http://ss.baggi.com.tr/app
|
||||
2026/02/23 12:30:02 🚀 Server running at: 0.0.0.0:8080
|
||||
2026/02/23 12:30:43 ➡️ POST /api/auth/login | auth=false
|
||||
2026/02/23 12:30:44 🔎 LOGIN DEBUG | mk_user_found=false err=mk_user not found hash_len=0
|
||||
2026/02/23 12:30:44 🟡 LEGACY LOGIN PATH: x
|
||||
2026/02/23 12:30:44 🟡 LEGACY LOGIN QUERY HIT: x
|
||||
2026/02/23 12:30:44 ❌ LEGACY SCAN ERROR: sql: no rows in result set
|
||||
2026/02/23 12:30:44 ⬅️ POST /api/auth/login | status=401 | 279.0065ms
|
||||
2026/02/23 12:30:44 ⚠️ LOGGER: claims is NIL
|
||||
2026/02/23 12:30:44 🧾 auditlog INSERT | actor_dfusr=<nil> actor_user=<nil> role=public nav /api/auth/login target=<nil>
|
||||
2026/02/23 12:30:50 ➡️ POST /api/auth/login | auth=false
|
||||
2026/02/23 12:30:50 🧪 MK USER FROM DB
|
||||
2026/02/23 12:30:50 🧪 ID=5 role_id=3 role_code='admin' depts=[UST_YONETIM]
|
||||
2026/02/23 12:30:50 🔎 LOGIN DEBUG | mk_user_found=true err=<nil> hash_len=60
|
||||
2026/02/23 12:30:50 🧪 LOGIN RESPONSE USER DEBUG
|
||||
2026/02/23 12:30:50 🧪 user.ID = 5
|
||||
2026/02/23 12:30:50 🧪 user.Username = mehmet.keçeci
|
||||
2026/02/23 12:30:50 🧪 user.RoleID = 3
|
||||
2026/02/23 12:30:50 🧪 user.RoleCode = 'admin'
|
||||
2026/02/23 12:30:50 🧪 user.IsActive = true
|
||||
2026/02/23 12:30:50 ⬅️ POST /api/auth/login | status=200 | 593.239ms
|
||||
2026/02/23 12:30:50 ⚠️ LOGGER: claims is NIL
|
||||
2026/02/23 12:30:50 🧾 auditlog INSERT | actor_dfusr=<nil> actor_user=<nil> role=public nav /api/auth/login target=<nil>
|
||||
2026/02/23 12:30:52 🔐 GLOBAL AUTH user=5 role=admin
|
||||
2026/02/23 12:30:52 ➡️ GET /api/finance/customer-balances | auth=true
|
||||
2026/02/23 12:30:52 AUTH_MIDDLEWARE PASS user=5 role=admin method=GET path=/api/finance/customer-balances
|
||||
2026/02/23 12:30:52 🔐 PERM CHECK user=5 role=3 dept=[UST_YONETIM] finance:view
|
||||
2026/02/23 12:30:53 ↳ ROLE+DEPT OVERRIDE = true
|
||||
2026/02/23 12:33:21 ⬅️ GET /api/finance/customer-balances | status=200 | 2m28.8586087s
|
||||
2026/02/23 12:33:21 ✅ LOGGER CLAIMS user=mehmet.keçeci role=admin id=5
|
||||
2026/02/23 12:33:21 🧾 auditlog INSERT | actor_dfusr=5 actor_user=mehmet.keçeci role=admin nav /api/finance/customer-balances target=<nil>
|
||||
2026/02/23 13:40:17 ➡️ POST /api/auth/refresh | auth=false
|
||||
2026/02/23 13:40:18 ⬅️ POST /api/auth/refresh | status=200 | 852.618ms
|
||||
2026/02/23 13:40:18 ⚠️ LOGGER: claims is NIL
|
||||
2026/02/23 13:40:18 🧾 auditlog INSERT | actor_dfusr=<nil> actor_user=<nil> role=public nav /api/auth/refresh target=<nil>
|
||||
2026/02/23 13:40:18 🔐 GLOBAL AUTH user=5 role=admin
|
||||
2026/02/23 13:40:18 ➡️ GET /api/finance/customer-balances | auth=true
|
||||
2026/02/23 13:40:18 AUTH_MIDDLEWARE PASS user=5 role=admin method=GET path=/api/finance/customer-balances
|
||||
2026/02/23 13:40:18 🔐 PERM CHECK user=5 role=3 dept=[UST_YONETIM] finance:view
|
||||
2026/02/23 13:40:19 ↳ ROLE+DEPT OVERRIDE = true
|
||||
2026/02/23 13:42:46 ⬅️ GET /api/finance/customer-balances | status=200 | 2m27.9525306s
|
||||
2026/02/23 13:42:46 ✅ LOGGER CLAIMS user=mehmet.keçeci role=admin id=5
|
||||
2026/02/23 13:42:46 🧾 auditlog INSERT | actor_dfusr=5 actor_user=mehmet.keçeci role=admin nav /api/finance/customer-balances target=<nil>
|
||||
exit status 1
|
||||
Reference in New Issue
Block a user