{"version":3,"file":"fikoyt-shared-aktivasyon.component-BnVVfcWJ.mjs","sources":["../../../projects/shared/src/lib/app/uygulamalar/firma-yonetim/core/db-base.service.ts","../../../projects/shared/src/lib/app/uygulamalar/firma-yonetim/services/firma.service.ts","../../../projects/shared/src/lib/app/uygulamalar/admin/services/admin.service.ts","../../../projects/shared/src/lib/app/uygulamalar/hmi-pano/aktivasyon/aktivasyon.component.html","../../../projects/shared/src/lib/app/uygulamalar/hmi-pano/aktivasyon/aktivasyon.component.ts"],"sourcesContent":["import { inject } from '@angular/core';\r\nimport { FikoYTService } from '@/src/service/fikoyt.service';\r\nimport { FikoYTRequestService } from '@/src/app/shared/services/fikoyt-request.service';\r\nimport { UnifiedCacheService } from '@/src/app/shared/services';\r\n\r\n// ─── SAYFALAMA TİPLERİ ───────────────────────────────────────────────────────\r\n\r\nexport interface ISayfaliSonuc {\r\n toplam: number;\r\n liste: T[];\r\n}\r\n\r\nexport interface ISayfalama {\r\n sayfa: number;\r\n limit: number;\r\n}\r\n\r\n// ─── ABSTRACT DB BASE SERVİS ─────────────────────────────────────────────────\r\n\r\nexport abstract class DbBaseService {\r\n protected FikoYT = inject(FikoYTService);\r\n protected req = inject(FikoYTRequestService);\r\n private cache = inject(UnifiedCacheService);\r\n\r\n protected cacheTTL = 60_000;\r\n\r\n protected cached(anahtar: string, ttl?: number): T | null {\r\n return this.cache.al(anahtar, ttl || this.cacheTTL);\r\n }\r\n\r\n protected cacheSet(anahtar: string, veri: T): T {\r\n return this.cache.set(anahtar, veri, this.cacheTTL);\r\n }\r\n\r\n protected cacheTemizle(onekFiltre?: string): void {\r\n this.cache.temizle(onekFiltre || undefined);\r\n }\r\n\r\n // ─── Temel DB İşlemleri ─────────────────────────────────────────────────────\r\n\r\n protected aggregate(komut: string, pipeline: any[]): Promise {\r\n return this.req.aggregate(komut, pipeline);\r\n }\r\n\r\n protected ekle(komut: string, veri: any): Promise {\r\n return this.req.ekle(komut, veri);\r\n }\r\n\r\n protected guncelle(komut: string, filter: any, veri: any): Promise {\r\n return this.req.guncelle(komut, filter, veri);\r\n }\r\n\r\n protected sil(komut: string, filter: any): Promise {\r\n return this.req.sil(komut, filter);\r\n }\r\n\r\n // ─── Sayfalı Sorgu Helper ──────────────────────────────────────────────────\r\n\r\n protected sayfaliPipeline(\r\n matchStage: any,\r\n sortStage: any,\r\n sayfa: number,\r\n limit: number,\r\n ekPipeline: any[] = [],\r\n ): any[] {\r\n return [\r\n { $match: matchStage },\r\n ...ekPipeline,\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $sort: sortStage },\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n ],\r\n },\r\n },\r\n ];\r\n }\r\n\r\n protected sayfaliSonucCoz(sonuc: any[]): ISayfaliSonuc {\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: (facet?.liste || []) as T[],\r\n };\r\n }\r\n\r\n // ─── Firma İzolasyonu ───────────────────────────────────────────────────────\r\n\r\n protected firmaMatch(firmaId: string, ekFiltre?: any): any {\r\n return { firmaId, ...(ekFiltre || {}) };\r\n }\r\n\r\n // ─── Denetim Kaydı ─────────────────────────────────────────────────────────\r\n\r\n protected async denetimKaydet(\r\n firmaId: string,\r\n islem: string,\r\n modul: string,\r\n detay: Record = {},\r\n ): Promise {\r\n const kullanici = this.FikoYT.kimlik.aktifKullaniciJson();\r\n await this.ekle('FikoYT.sistem.DB.hareketler.ekle', {\r\n vt: 'FikoYT.sistem.denetim',\r\n firmaId,\r\n islem,\r\n modul,\r\n detay,\r\n kullaniciId: kullanici?._id || 'bilinmiyor',\r\n tarih: new Date().toISOString(),\r\n }).catch(() => {});\r\n }\r\n\r\n // ─── Aktif Kullanıcı ───────────────────────────────────────────────────────\r\n\r\n protected get aktifKullaniciId(): string {\r\n return this.FikoYT.kimlik.aktifKullaniciJson()?._id || '';\r\n }\r\n\r\n protected get aktifKullanici(): any {\r\n return this.FikoYT.kimlik.aktifKullaniciJson();\r\n }\r\n\r\n // ─── Zaman Yardımcıları ─────────────────────────────────────────────────────\r\n\r\n protected bugunBaslangic(): string {\r\n const d = new Date();\r\n d.setHours(0, 0, 0, 0);\r\n return d.toISOString();\r\n }\r\n\r\n protected simdi(): string {\r\n return new Date().toISOString();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DbBaseService, ISayfaliSonuc } from '../core/db-base.service';\r\nimport { escapeRegex } from '@/src/app/uygulamalar/yuz-tanima/utils/regex.utils';\r\nimport type {\r\n IFirma, IFirmaYetki, FirmaRol, FirmaYetkiTuru,\r\n IFirmaCihaz, CihazUygulamaModu,\r\n IFirmaPersonel, IFirmaDepartman, IVardiya, IVardiyaGrup,\r\n IGirisCikis, IIzin,\r\n} from '../interfaces';\r\n\r\n// ─── KOLEKSIYON KOMUTLARI ─────────────────────────────────────────────────────\r\n\r\nconst DB = {\r\n firmalar: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_yetkileri: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_cihazlar: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_personeller: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_departmanlar:(op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_vardiyalar: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_vardiya_gruplari: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_giris_cikis: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_izinler: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n firma_denetim: (op: string) => `FikoYT.sistem.DB.hareketler.${op}`,\r\n} as const;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FirmaService extends DbBaseService {\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // FİRMA CRUD\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async firmaListesi(sayfa = 1, limit = 20): Promise> {\r\n const sonuc = await this.aggregate(DB.firmalar('aggregate'),\r\n this.sayfaliPipeline({ vt: 'FikoYT.sistem.firmalar', aktif: true }, { olusturulmaTarihi: -1 }, sayfa, limit),\r\n );\r\n return this.sayfaliSonucCoz(sonuc);\r\n }\r\n\r\n async firmaGetir(firmaId: string): Promise {\r\n const cacheKey = `firma:${firmaId}`;\r\n const cached = this.cached(cacheKey);\r\n if (cached) return cached;\r\n\r\n const sonuc = await this.aggregate(DB.firmalar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firmalar' } },\r\n { $match: { _id: firmaId } },\r\n { $limit: 1 },\r\n ]);\r\n const firma = sonuc?.[0] || null;\r\n if (firma) this.cacheSet(cacheKey, firma);\r\n return firma;\r\n }\r\n\r\n async firmaEkle(firma: Partial): Promise {\r\n const sonuc = await this.ekle(DB.firmalar('ekle'), {\r\n ...firma,\r\n vt: 'FikoYT.sistem.firmalar',\r\n aktif: true,\r\n olusturan: this.aktifKullaniciId,\r\n olusturulmaTarihi: this.simdi(),\r\n guncellenmeTarihi: this.simdi(),\r\n });\r\n this.cacheTemizle('firma:');\r\n await this.denetimKaydet(sonuc?._id || '', 'firma_olusturuldu', 'firma', { firmaAdi: firma.firmaAdi });\r\n return sonuc;\r\n }\r\n\r\n async firmaGuncelle(firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.guncelle(DB.firmalar('guncelle'),\r\n { _id: firmaId },\r\n { $set: { ...veri, guncellenmeTarihi: this.simdi() } },\r\n );\r\n this.cacheTemizle('firma:');\r\n await this.denetimKaydet(firmaId, 'firma_guncellendi', 'firma', { alanlar: Object.keys(veri) });\r\n return sonuc;\r\n }\r\n\r\n async firmaSil(firmaId: string): Promise {\r\n const sonuc = await this.guncelle(DB.firmalar('guncelle'),\r\n { _id: firmaId },\r\n { $set: { aktif: false, guncellenmeTarihi: this.simdi() } },\r\n );\r\n this.cacheTemizle('firma:');\r\n await this.denetimKaydet(firmaId, 'firma_silindi', 'firma');\r\n return sonuc;\r\n }\r\n\r\n async firmaKoduKontrol(firmaKodu: string, haricId?: string): Promise {\r\n const match: any = { firmaKodu, aktif: true };\r\n if (haricId) match._id = { $ne: haricId };\r\n const sonuc = await this.aggregate(DB.firmalar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firmalar' } },\r\n { $match: match },\r\n { $count: 'sayi' },\r\n ]);\r\n return (sonuc?.[0]?.sayi || 0) > 0;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // YETKİ YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async firmaYetkiAta(\r\n firmaId: string,\r\n kullaniciId: string,\r\n rol: FirmaRol,\r\n yetkiler: FirmaYetkiTuru[],\r\n departmanlar?: string[],\r\n ): Promise {\r\n const sonuc = await this.ekle(DB.firma_yetkileri('ekle'), {\r\n vt: 'FikoYT.sistem.firma.yetkiler',\r\n firmaId, kullaniciId, rol, yetkiler,\r\n departmanlar: departmanlar || [],\r\n olusturan: this.aktifKullaniciId,\r\n olusturulmaTarihi: this.simdi(),\r\n });\r\n await this.denetimKaydet(firmaId, 'yetki_atandi', 'yetki', { kullaniciId, rol });\r\n return sonuc;\r\n }\r\n\r\n async firmaYetkiGuncelle(yetkiId: string, firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.guncelle(DB.firma_yetkileri('guncelle'),\r\n { _id: yetkiId },\r\n { $set: veri },\r\n );\r\n await this.denetimKaydet(firmaId, 'yetki_guncellendi', 'yetki', { yetkiId });\r\n return sonuc;\r\n }\r\n\r\n async firmaYetkiSil(yetkiId: string, firmaId: string): Promise {\r\n const sonuc = await this.sil(DB.firma_yetkileri('sil'), { _id: yetkiId });\r\n await this.denetimKaydet(firmaId, 'yetki_silindi', 'yetki', { yetkiId });\r\n return sonuc;\r\n }\r\n\r\n async firmaYetkileri(firmaId: string): Promise {\r\n return this.aggregate(DB.firma_yetkileri('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.yetkiler' } },\r\n { $match: { firmaId } },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'kullaniciId',\r\n foreignField: '_id',\r\n as: 'kullanici',\r\n },\r\n },\r\n { $unwind: { path: '$kullanici', preserveNullAndEmptyArrays: true } },\r\n { $sort: { olusturulmaTarihi: -1 } },\r\n ]);\r\n }\r\n\r\n async kullaniciFirmaYetkileri(kullaniciId: string): Promise {\r\n return this.aggregate(DB.firma_yetkileri('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.yetkiler' } },\r\n { $match: { kullaniciId } },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { fId: '$firmaId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firmalar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$fId'] } } },\r\n ],\r\n as: 'firma',\r\n },\r\n },\r\n { $unwind: '$firma' },\r\n { $match: { 'firma.aktif': true } },\r\n ]);\r\n }\r\n\r\n async kullaniciFirmaYetkisiVar(kullaniciId: string, firmaId: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_yetkileri('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.yetkiler' } },\r\n { $match: { kullaniciId, firmaId } },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // CİHAZ YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async cihazListesi(firmaId: string, sayfa = 1, limit = 50): Promise> {\r\n const sonuc = await this.aggregate(DB.firma_cihazlar('aggregate'),\r\n this.sayfaliPipeline(\r\n this.firmaMatch(firmaId, { vt: 'FikoYT.sistem.cihazlar', aktivasyonDurumu: { $ne: 'iptal' } }),\r\n { olusturulmaTarihi: -1 },\r\n sayfa, limit,\r\n [\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { dId: '$departmanId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$dId'] } } },\r\n ],\r\n as: 'departman',\r\n },\r\n },\r\n { $unwind: { path: '$departman', preserveNullAndEmptyArrays: true } },\r\n ],\r\n ),\r\n );\r\n return this.sayfaliSonucCoz(sonuc);\r\n }\r\n\r\n async cihazGetir(cihazId: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_cihazlar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { _id: cihazId } },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { fId: '$firmaId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firmalar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$fId'] } } },\r\n ],\r\n as: 'firma',\r\n },\r\n },\r\n { $unwind: { path: '$firma', preserveNullAndEmptyArrays: true } },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n async aktivasyonKoduOlustur(firmaId: string, cihazBilgi: Partial): Promise {\r\n // Mükerrer kayıt kontrolü: aynı firma + cihaz adı\r\n if (cihazBilgi.cihazAdi) {\r\n const mevcut = await this.aggregate(DB.firma_cihazlar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { firmaId, cihazAdi: cihazBilgi.cihazAdi, aktivasyonDurumu: { $ne: 'iptal' } } },\r\n { $count: 'sayi' },\r\n ]);\r\n if (mevcut?.[0]?.sayi > 0) {\r\n throw new Error('MUKERRER_CIHAZ');\r\n }\r\n }\r\n\r\n const kod = this.generateAktivasyonKodu();\r\n await this.ekle(DB.firma_cihazlar('ekle'), {\r\n ...cihazBilgi,\r\n vt: 'FikoYT.sistem.cihazlar',\r\n firmaId,\r\n aktivasyonKodu: kod,\r\n aktivasyonDurumu: 'bekliyor',\r\n cevrimiciMi: false,\r\n konfigurasyon: cihazBilgi.konfigurasyon || {},\r\n olusturulmaTarihi: this.simdi(),\r\n });\r\n await this.denetimKaydet(firmaId, 'aktivasyon_kodu_olusturuldu', 'cihaz', { kod, cihazAdi: cihazBilgi.cihazAdi });\r\n return kod;\r\n }\r\n\r\n async cihazAktivasyonDogrula(kod: string, cihazKimlik: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_cihazlar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { aktivasyonKodu: kod, aktivasyonDurumu: 'bekliyor' } },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { fId: '$firmaId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firmalar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$fId'] } } },\r\n ],\r\n as: 'firma',\r\n },\r\n },\r\n { $unwind: '$firma' },\r\n { $limit: 1 },\r\n ]);\r\n\r\n if (!sonuc?.length) return null;\r\n\r\n await this.guncelle(DB.firma_cihazlar('guncelle'),\r\n { _id: sonuc[0]._id },\r\n {\r\n $set: {\r\n cihazKimlik,\r\n aktivasyonDurumu: 'aktif',\r\n aktivasyonTarihi: this.simdi(),\r\n },\r\n },\r\n );\r\n\r\n await this.denetimKaydet(sonuc[0].firmaId, 'cihaz_aktiflestirildi', 'cihaz', { cihazKimlik, kod });\r\n return sonuc[0];\r\n }\r\n\r\n async cihazGuncelle(cihazId: string, firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.guncelle(DB.firma_cihazlar('guncelle'),\r\n { _id: cihazId },\r\n { $set: { ...veri, guncellenmeTarihi: this.simdi() } },\r\n );\r\n await this.denetimKaydet(firmaId, 'cihaz_guncellendi', 'cihaz', { cihazId });\r\n return sonuc;\r\n }\r\n\r\n async cihazDurumGuncelle(cihazId: string, firmaId: string, durum: 'aktif' | 'askida' | 'iptal'): Promise {\r\n const sonuc = await this.guncelle(DB.firma_cihazlar('guncelle'),\r\n { _id: cihazId },\r\n { $set: { aktivasyonDurumu: durum, guncellenmeTarihi: this.simdi() } },\r\n );\r\n await this.denetimKaydet(firmaId, 'cihaz_durum_degisti', 'cihaz', { cihazId, durum });\r\n return sonuc;\r\n }\r\n\r\n private generateAktivasyonKodu(): string {\r\n const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // Karışabilecek karakterler çıkarıldı (0/O, 1/I)\r\n let kod = '';\r\n for (let i = 0; i < 6; i++) {\r\n kod += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return kod;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // PERSONEL YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async personelListesi(\r\n firmaId: string,\r\n sayfa = 1,\r\n limit = 20,\r\n filtre?: { departmanId?: string; arama?: string; aktif?: boolean },\r\n ): Promise> {\r\n const match: any = this.firmaMatch(firmaId, { aktif: filtre?.aktif !== false });\r\n if (filtre?.departmanId) match.departmanId = filtre.departmanId;\r\n if (filtre?.arama) {\r\n const regex = { $regex: escapeRegex(filtre.arama), $options: 'i' };\r\n match.$or = [\r\n { ad: regex },\r\n { soyad: regex },\r\n { sicilNo: regex },\r\n { kartUid: regex },\r\n ];\r\n }\r\n\r\n match.vt = 'FikoYT.sistem.firma.personeller';\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'),\r\n this.sayfaliPipeline(match, { ad: 1, soyad: 1 }, sayfa, limit, [\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { dId: '$departmanId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$dId'] } } },\r\n ],\r\n as: 'departman',\r\n },\r\n },\r\n { $unwind: { path: '$departman', preserveNullAndEmptyArrays: true } },\r\n ]),\r\n );\r\n return this.sayfaliSonucCoz(sonuc);\r\n }\r\n\r\n async personelGetir(personelId: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { _id: personelId } },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { dId: '$departmanId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$dId'] } } },\r\n ],\r\n as: 'departman',\r\n },\r\n },\r\n { $unwind: { path: '$departman', preserveNullAndEmptyArrays: true } },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n async personelEkle(firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.ekle(DB.firma_personeller('ekle'), {\r\n ...veri,\r\n vt: 'FikoYT.sistem.firma.personeller',\r\n firmaId,\r\n aktif: true,\r\n izinHakki: veri.izinHakki || { yillikIzin: 14, kullanilanIzin: 0, kalanIzin: 14 },\r\n olusturulmaTarihi: this.simdi(),\r\n guncellenmeTarihi: this.simdi(),\r\n });\r\n this.cacheTemizle(`personel:${firmaId}`);\r\n await this.denetimKaydet(firmaId, 'personel_eklendi', 'personel', { ad: veri.ad, soyad: veri.soyad });\r\n return sonuc;\r\n }\r\n\r\n async personelGuncelle(personelId: string, firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.guncelle(DB.firma_personeller('guncelle'),\r\n { _id: personelId },\r\n { $set: { ...veri, guncellenmeTarihi: this.simdi() } },\r\n );\r\n this.cacheTemizle(`personel:${firmaId}`);\r\n await this.denetimKaydet(firmaId, 'personel_guncellendi', 'personel', { personelId });\r\n return sonuc;\r\n }\r\n\r\n async personelSil(personelId: string, firmaId: string): Promise {\r\n const sonuc = await this.guncelle(DB.firma_personeller('guncelle'),\r\n { _id: personelId },\r\n { $set: { aktif: false, istenCikisTarihi: this.simdi(), guncellenmeTarihi: this.simdi() } },\r\n );\r\n this.cacheTemizle(`personel:${firmaId}`);\r\n await this.denetimKaydet(firmaId, 'personel_silindi', 'personel', { personelId });\r\n return sonuc;\r\n }\r\n\r\n async kartAtama(personelId: string, firmaId: string, kartUid: string): Promise {\r\n const sonuc = await this.guncelle(DB.firma_personeller('guncelle'),\r\n { _id: personelId },\r\n { $set: { kartUid, kartAtanmaTarihi: this.simdi(), guncellenmeTarihi: this.simdi() } },\r\n );\r\n await this.denetimKaydet(firmaId, 'kart_atandi', 'personel', { personelId, kartUid });\r\n return sonuc;\r\n }\r\n\r\n async kartIptal(personelId: string, firmaId: string): Promise {\r\n const sonuc = await this.guncelle(DB.firma_personeller('guncelle'),\r\n { _id: personelId },\r\n { $set: { guncellenmeTarihi: this.simdi() }, $unset: { kartUid: '', kartAtanmaTarihi: '' } },\r\n );\r\n await this.denetimKaydet(firmaId, 'kart_iptal_edildi', 'personel', { personelId });\r\n return sonuc;\r\n }\r\n\r\n async kartUidKontrol(firmaId: string, kartUid: string, haricId?: string): Promise {\r\n const match: any = this.firmaMatch(firmaId, { kartUid, aktif: true });\r\n if (haricId) match._id = { $ne: haricId };\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: match },\r\n { $count: 'sayi' },\r\n ]);\r\n return (sonuc?.[0]?.sayi || 0) > 0;\r\n }\r\n\r\n /**\r\n * HMI kart okutulduğunda firma personelinden kartUid ile sorgula.\r\n * Tek pipeline ile departman + üye profili birleştirilir (2 istek yerine 1).\r\n * 60s TTL cache ile aynı kart tekrar okutulduğunda anlık cevap.\r\n */\r\n private _kartCache = new Map();\r\n private readonly _KART_CACHE_TTL = 60_000; // 60 saniye\r\n\r\n async kartSorgula(firmaId: string, kartUid: string): Promise {\r\n // Cache kontrolü\r\n const cacheKey = `${firmaId}:${kartUid}`;\r\n const cached = this._kartCache.get(cacheKey);\r\n if (cached && (Date.now() - cached.zaman) < this._KART_CACHE_TTL) {\r\n return cached.veri;\r\n }\r\n\r\n const match: any = firmaId\r\n ? this.firmaMatch(firmaId, { kartUid, aktif: true })\r\n : { kartUid, aktif: true };\r\n\r\n // Tek pipeline: personel + departman + üye profili ($lookup ile birleştir)\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: match },\r\n { $limit: 1 },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { dId: '$departmanId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$dId'] } } },\r\n ],\r\n as: '_dept',\r\n },\r\n },\r\n { $addFields: { departman: { $arrayElemAt: ['$_dept', 0] } } },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'kullaniciId',\r\n foreignField: '_id',\r\n as: '_uye',\r\n },\r\n },\r\n {\r\n $addFields: {\r\n _uyeData: { $arrayElemAt: ['$_uye', 0] },\r\n },\r\n },\r\n {\r\n $addFields: {\r\n _uyeIsim: {\r\n $ifNull: [\r\n '$_uyeData.isim',\r\n { $arrayElemAt: [{ $split: [{ $ifNull: ['$_uyeData.veri.pilesmi', ''] }, ' '] }, 0] },\r\n ],\r\n },\r\n _uyeSoyisim: { $ifNull: ['$_uyeData.soyIsim', ''] },\r\n _uyeResimId: { $ifNull: ['$_uyeData.profilResmi', { $ifNull: ['$_uyeData.veri.resimId', ''] }] },\r\n _uyeKullaniciAdi: { $ifNull: ['$_uyeData.kullaniciAdi', ''] },\r\n _uyeYetkiler: { $ifNull: ['$_uyeData.yetkiler', { $ifNull: ['$_uyeData.veri.yetkiler', []] }] },\r\n },\r\n },\r\n { $project: { _dept: 0, _uye: 0, _uyeData: 0 } },\r\n ]);\r\n\r\n const personel = sonuc?.[0] || null;\r\n\r\n // Cache'e kaydet (null sonuçları kısa süreli cache'le — 5sn)\r\n if (personel) {\r\n this._kartCache.set(cacheKey, { veri: personel, zaman: Date.now() });\r\n } else {\r\n this._kartCache.set(cacheKey, { veri: null as any, zaman: Date.now() - this._KART_CACHE_TTL + 5000 });\r\n }\r\n\r\n return personel;\r\n }\r\n\r\n /** Test amaçlı: ad/soyad ile personel sorgula (kartSorgula ile aynı pipeline) */\r\n async personelAraIsimle(ad: string, soyad: string): Promise {\r\n const match: any = { aktif: true, ad: { $regex: escapeRegex(ad), $options: 'i' }, soyad: { $regex: escapeRegex(soyad), $options: 'i' } };\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: match },\r\n { $limit: 1 },\r\n { $lookup: { from: 'hareketler', let: { dId: '$departmanId' }, pipeline: [{ $match: { vt: 'FikoYT.sistem.firma.departmanlar' } }, { $match: { $expr: { $eq: ['$_id', '$$dId'] } } }], as: '_dept' } },\r\n { $addFields: { departman: { $arrayElemAt: ['$_dept', 0] } } },\r\n { $lookup: { from: 'goUyeler', localField: 'kullaniciId', foreignField: '_id', as: '_uye' } },\r\n { $addFields: { _uyeData: { $arrayElemAt: ['$_uye', 0] } } },\r\n {\r\n $addFields: {\r\n _uyeIsim: { $ifNull: ['$_uyeData.isim', { $arrayElemAt: [{ $split: [{ $ifNull: ['$_uyeData.veri.pilesmi', ''] }, ' '] }, 0] }] },\r\n _uyeSoyisim: { $ifNull: ['$_uyeData.soyIsim', ''] },\r\n _uyeResimId: { $ifNull: ['$_uyeData.profilResmi', { $ifNull: ['$_uyeData.veri.resimId', ''] }] },\r\n _uyeKullaniciAdi: { $ifNull: ['$_uyeData.kullaniciAdi', ''] },\r\n _uyeYetkiler: { $ifNull: ['$_uyeData.yetkiler', { $ifNull: ['$_uyeData.veri.yetkiler', []] }] },\r\n },\r\n },\r\n { $project: { _dept: 0, _uye: 0, _uyeData: 0 } },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n async uyeAra(arama: string, limit = 10): Promise {\r\n const regex = { $regex: escapeRegex(arama), $options: 'i' };\r\n return this.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n {\r\n $match: {\r\n silindi: { $ne: true },\r\n $or: [\r\n { kullaniciAdi: regex },\r\n { 'veri.pilesmi': regex },\r\n { 'veri.ePosta': regex },\r\n ],\r\n },\r\n },\r\n { $limit: limit },\r\n {\r\n $project: {\r\n kullaniciAdi: 1,\r\n 'veri.pilesmi': 1,\r\n 'veri.ePosta': 1,\r\n 'veri.resimId': 1,\r\n 'veri.cinsiyet': 1,\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n async uyePersonelKontrol(kullaniciId: string, firmaId: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { firmaId, kullaniciId, aktif: true } },\r\n { $count: 'sayi' },\r\n ]);\r\n return (sonuc?.[0]?.sayi || 0) > 0;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // DEPARTMAN YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async departmanListesi(firmaId: string): Promise {\r\n const cacheKey = `dept:${firmaId}`;\r\n const cached = this.cached(cacheKey);\r\n if (cached) return cached;\r\n\r\n const sonuc = await this.aggregate(DB.firma_departmanlar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: this.firmaMatch(firmaId, { aktif: true }) },\r\n { $sort: { sira: 1, departmanAdi: 1 } },\r\n ]);\r\n return this.cacheSet(cacheKey, sonuc);\r\n }\r\n\r\n async departmanListesiAgac(firmaId: string): Promise {\r\n return this.aggregate(DB.firma_departmanlar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.departmanlar' } },\r\n { $match: { firmaId, aktif: true } },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { deptId: '$_id' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$departmanId', '$$deptId'] }, aktif: true } },\r\n { $count: 'sayi' },\r\n ],\r\n as: 'personelSayim',\r\n },\r\n },\r\n {\r\n $addFields: {\r\n personelSayisi: { $ifNull: [{ $arrayElemAt: ['$personelSayim.sayi', 0] }, 0] },\r\n },\r\n },\r\n { $project: { personelSayim: 0 } },\r\n { $sort: { sira: 1, departmanAdi: 1 } },\r\n ]);\r\n }\r\n\r\n async departmanEkle(firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.ekle(DB.firma_departmanlar('ekle'), {\r\n ...veri,\r\n vt: 'FikoYT.sistem.firma.departmanlar',\r\n firmaId,\r\n aktif: true,\r\n });\r\n this.cacheTemizle(`dept:${firmaId}`);\r\n await this.denetimKaydet(firmaId, 'departman_eklendi', 'departman', { departmanAdi: veri.departmanAdi });\r\n return sonuc;\r\n }\r\n\r\n async departmanGuncelle(departmanId: string, firmaId: string, veri: Partial): Promise {\r\n const sonuc = await this.guncelle(DB.firma_departmanlar('guncelle'),\r\n { _id: departmanId },\r\n { $set: veri },\r\n );\r\n this.cacheTemizle(`dept:${firmaId}`);\r\n return sonuc;\r\n }\r\n\r\n async departmanSil(departmanId: string, firmaId: string): Promise {\r\n const sonuc = await this.guncelle(DB.firma_departmanlar('guncelle'),\r\n { _id: departmanId },\r\n { $set: { aktif: false } },\r\n );\r\n this.cacheTemizle(`dept:${firmaId}`);\r\n await this.denetimKaydet(firmaId, 'departman_silindi', 'departman', { departmanId });\r\n return sonuc;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // VARDİYA YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async vardiyaListesi(firmaId: string): Promise {\r\n return this.aggregate(DB.firma_vardiyalar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.vardiyalar' } },\r\n { $match: this.firmaMatch(firmaId) },\r\n { $sort: { baslangicSaati: 1 } },\r\n ]);\r\n }\r\n\r\n async vardiyaEkle(firmaId: string, veri: Partial): Promise {\r\n return this.ekle(DB.firma_vardiyalar('ekle'), { ...veri, vt: 'FikoYT.sistem.firma.vardiyalar', firmaId });\r\n }\r\n\r\n async vardiyaGuncelle(vardiyaId: string, veri: Partial): Promise {\r\n return this.guncelle(DB.firma_vardiyalar('guncelle'), { _id: vardiyaId }, { $set: veri });\r\n }\r\n\r\n async vardiyaGrupListesi(firmaId: string): Promise {\r\n return this.aggregate(DB.firma_vardiya_gruplari('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.vardiya_gruplari' } },\r\n { $match: this.firmaMatch(firmaId) },\r\n { $sort: { grupAdi: 1 } },\r\n ]);\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // GİRİŞ/ÇIKIŞ (PDKS)\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async girisCikisKaydet(firmaId: string, kayit: Partial): Promise {\r\n if (kayit.istemciKayitId) {\r\n const mevcut = await this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis', firmaId, istemciKayitId: kayit.istemciKayitId } },\r\n { $limit: 1 },\r\n ]);\r\n if (mevcut?.[0]) return mevcut[0];\r\n }\r\n return this.ekle(DB.firma_giris_cikis('ekle'), {\r\n ...kayit,\r\n vt: 'FikoYT.sistem.giris_cikis',\r\n firmaId,\r\n zaman: kayit.zaman || this.simdi(),\r\n onayDurumu: kayit.onayDurumu || 'otomatik',\r\n });\r\n }\r\n\r\n async gunlukPuantaj(firmaId: string, tarih: string): Promise {\r\n const gun = new Date(tarih);\r\n gun.setHours(0, 0, 0, 0);\r\n const ertesiGun = new Date(gun);\r\n ertesiGun.setDate(ertesiGun.getDate() + 1);\r\n\r\n return this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis' } },\r\n { $match: { firmaId, zaman: { $gte: gun.toISOString(), $lt: ertesiGun.toISOString() } } },\r\n { $sort: { zaman: 1 } },\r\n {\r\n $group: {\r\n _id: '$personelId',\r\n hareketler: { $push: { tur: '$tur', zaman: '$zaman', cihazId: '$cihazId' } },\r\n },\r\n },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { pId: '$_id' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$pId'] } } },\r\n ],\r\n as: 'personel',\r\n },\r\n },\r\n { $unwind: '$personel' },\r\n ]);\r\n }\r\n\r\n async sonGirisCikis(firmaId: string, limit = 20): Promise {\r\n return this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis' } },\r\n { $match: this.firmaMatch(firmaId) },\r\n { $sort: { zaman: -1 } },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { pId: '$personelId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$pId'] } } },\r\n ],\r\n as: 'personel',\r\n },\r\n },\r\n { $unwind: { path: '$personel', preserveNullAndEmptyArrays: true } },\r\n ]);\r\n }\r\n\r\n /**\r\n * HMI mola başlat/bitir kaydı.\r\n * firma_giris_cikis koleksiyonuna tur='mola_baslangic' veya 'mola_bitis' olarak yazar.\r\n */\r\n async molaKaydet(\r\n firmaId: string,\r\n personelId: string,\r\n kartUid: string,\r\n cihazId: string,\r\n tur: 'mola_baslangic' | 'mola_bitis',\r\n ): Promise {\r\n return this.ekle(DB.firma_giris_cikis('ekle'), {\r\n vt: 'FikoYT.sistem.giris_cikis',\r\n firmaId,\r\n personelId,\r\n kartUid,\r\n cihazId,\r\n tur,\r\n zaman: this.simdi(),\r\n onayDurumu: 'otomatik',\r\n });\r\n }\r\n\r\n /**\r\n * Süper yetkili HMI puantaj düzeltmesi.\r\n * Mevcut kayıtın zamanını değiştirir ve onayDurumu='duzeltme' olarak işaretler.\r\n */\r\n async puantajDuzenle(\r\n firmaId: string,\r\n personelId: string,\r\n tur: 'giris' | 'cikis' | 'mola_baslangic' | 'mola_bitis',\r\n eskiZaman: string,\r\n yeniZaman: string,\r\n notlar: string,\r\n ): Promise {\r\n const sonuc = await this.guncelle(\r\n DB.firma_giris_cikis('guncelle'),\r\n { vt: 'FikoYT.sistem.giris_cikis', firmaId, personelId, tur, zaman: eskiZaman },\r\n { $set: { zaman: yeniZaman, onayDurumu: 'duzeltme' as const, notlar } },\r\n );\r\n await this.denetimKaydet(firmaId, 'puantaj_duzeltildi', 'pdks', { personelId, tur, eskiZaman, yeniZaman });\r\n return sonuc;\r\n }\r\n\r\n async kartIlePersonelBul(firmaId: string, kartUid: string): Promise {\r\n const sonuc = await this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: this.firmaMatch(firmaId, { kartUid, aktif: true }) },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // İZİN YÖNETİMİ\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async izinListesi(\r\n firmaId: string,\r\n sayfa = 1,\r\n limit = 20,\r\n filtre?: { durum?: string; personelId?: string },\r\n ): Promise> {\r\n const match: any = this.firmaMatch(firmaId);\r\n if (filtre?.durum) match.durum = filtre.durum;\r\n if (filtre?.personelId) match.personelId = filtre.personelId;\r\n\r\n match.vt = 'FikoYT.sistem.firma.izinler';\r\n const sonuc = await this.aggregate(DB.firma_izinler('aggregate'),\r\n this.sayfaliPipeline(match, { olusturulmaTarihi: -1 }, sayfa, limit, [\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { pId: '$personelId' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$pId'] } } },\r\n ],\r\n as: 'personel',\r\n },\r\n },\r\n { $unwind: { path: '$personel', preserveNullAndEmptyArrays: true } },\r\n ]),\r\n );\r\n return this.sayfaliSonucCoz(sonuc);\r\n }\r\n\r\n async izinEkle(firmaId: string, veri: Partial): Promise {\r\n return this.ekle(DB.firma_izinler('ekle'), {\r\n ...veri,\r\n vt: 'FikoYT.sistem.firma.izinler',\r\n firmaId,\r\n durum: 'bekliyor',\r\n olusturulmaTarihi: this.simdi(),\r\n });\r\n }\r\n\r\n async izinDurumGuncelle(izinId: string, firmaId: string, durum: string, onaylayanId?: string): Promise {\r\n const set: any = { durum };\r\n if (onaylayanId) set.onaylayanId = onaylayanId;\r\n const sonuc = await this.guncelle(DB.firma_izinler('guncelle'),\r\n { _id: izinId },\r\n { $set: set },\r\n );\r\n await this.denetimKaydet(firmaId, 'izin_durum_degisti', 'izin', { izinId, durum });\r\n return sonuc;\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // FİRMA ÖZET / DASHBOARD\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async firmaOzet(firmaId: string): Promise<{\r\n personelSayisi: number;\r\n cihazSayisi: number;\r\n bugunGiris: number;\r\n aktifVardiya: number;\r\n bekleyenIzin: number;\r\n }> {\r\n const [personel, cihaz, bugunGiris, vardiya, izin] = await Promise.all([\r\n this.aggregate(DB.firma_personeller('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: this.firmaMatch(firmaId, { aktif: true }) },\r\n { $count: 'sayi' },\r\n ]),\r\n this.aggregate(DB.firma_cihazlar('aggregate'), [\r\n { $match: this.firmaMatch(firmaId, { vt: 'FikoYT.sistem.cihazlar', aktivasyonDurumu: 'aktif' }) },\r\n { $count: 'sayi' },\r\n ]),\r\n this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis' } },\r\n { $match: this.firmaMatch(firmaId, { tur: 'giris', zaman: { $gte: this.bugunBaslangic() } }) },\r\n { $count: 'sayi' },\r\n ]),\r\n this.aggregate(DB.firma_vardiyalar('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.vardiyalar' } },\r\n { $match: this.firmaMatch(firmaId, { aktif: true }) },\r\n { $count: 'sayi' },\r\n ]),\r\n this.aggregate(DB.firma_izinler('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.firma.izinler' } },\r\n { $match: this.firmaMatch(firmaId, { durum: 'bekliyor' }) },\r\n { $count: 'sayi' },\r\n ]),\r\n ]);\r\n\r\n return {\r\n personelSayisi: personel[0]?.sayi || 0,\r\n cihazSayisi: cihaz[0]?.sayi || 0,\r\n bugunGiris: bugunGiris[0]?.sayi || 0,\r\n aktifVardiya: vardiya[0]?.sayi || 0,\r\n bekleyenIzin: izin[0]?.sayi || 0,\r\n };\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // PDKS AYARLARI\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async pdksAyarlarGetir(firmaId: string): Promise {\r\n const sonuc = await this.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.pdks_ayarlar' } },\r\n { $match: { firmaId } },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n async pdksAyarlarKaydet(firmaId: string, ayarlar: any): Promise {\r\n // Upsert: varsa güncelle, yoksa ekle\r\n const mevcut = await this.pdksAyarlarGetir(firmaId);\r\n if (mevcut) {\r\n return this.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { vt: 'FikoYT.sistem.pdks_ayarlar', firmaId },\r\n { $set: { ...ayarlar, guncellenmeTarihi: this.simdi() } },\r\n );\r\n }\r\n return this.ekle('FikoYT.sistem.DB.hareketler.ekle', {\r\n ...ayarlar,\r\n vt: 'FikoYT.sistem.pdks_ayarlar',\r\n firmaId,\r\n olusturulmaTarihi: this.simdi(),\r\n guncellenmeTarihi: this.simdi(),\r\n });\r\n }\r\n\r\n async aylikPuantaj(firmaId: string, yil: number, ay: number): Promise {\r\n const ayBas = new Date(yil, ay, 1);\r\n const aySon = new Date(yil, ay + 1, 1);\r\n return this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis' } },\r\n { $match: { firmaId, zaman: { $gte: ayBas.toISOString(), $lt: aySon.toISOString() } } },\r\n { $sort: { zaman: 1 } },\r\n {\r\n $group: {\r\n _id: {\r\n personelId: '$personelId',\r\n gun: { $dateToString: { format: '%Y-%m-%d', date: { $toDate: '$zaman' } } },\r\n },\r\n hareketler: { $push: { tur: '$tur', zaman: '$zaman', cihazId: '$cihazId' } },\r\n },\r\n },\r\n {\r\n $group: {\r\n _id: '$_id.personelId',\r\n gunler: { $push: { tarih: '$_id.gun', hareketler: '$hareketler' } },\r\n },\r\n },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { pId: '$_id' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$pId'] } } },\r\n ],\r\n as: 'personel',\r\n },\r\n },\r\n { $unwind: '$personel' },\r\n { $sort: { 'personel.ad': 1 } },\r\n ]);\r\n }\r\n\r\n async gunlukDurumOzeti(firmaId: string): Promise {\r\n const bugun = new Date();\r\n bugun.setHours(0, 0, 0, 0);\r\n const yarin = new Date(bugun);\r\n yarin.setDate(yarin.getDate() + 1);\r\n\r\n return this.aggregate(DB.firma_giris_cikis('aggregate'), [\r\n { $match: { vt: 'FikoYT.sistem.giris_cikis' } },\r\n { $match: { firmaId, zaman: { $gte: bugun.toISOString(), $lt: yarin.toISOString() } } },\r\n { $sort: { zaman: 1 } },\r\n {\r\n $group: {\r\n _id: '$personelId',\r\n hareketler: { $push: { tur: '$tur', zaman: '$zaman' } },\r\n ilkGiris: { $first: { $cond: [{ $eq: ['$tur', 'giris'] }, '$zaman', null] } },\r\n sonCikis: { $last: { $cond: [{ $eq: ['$tur', 'cikis'] }, '$zaman', null] } },\r\n },\r\n },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { pId: '$_id' },\r\n pipeline: [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { $expr: { $eq: ['$_id', '$$pId'] } } },\r\n ],\r\n as: 'personel',\r\n },\r\n },\r\n { $unwind: '$personel' },\r\n { $match: { 'personel.aktif': true } },\r\n { $sort: { 'personel.ad': 1 } },\r\n ]);\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // DENETİM KAYITLARI\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n async denetimKayitlari(firmaId: string, sayfa = 1, limit = 50): Promise> {\r\n const sonuc = await this.aggregate(DB.firma_denetim('aggregate'),\r\n this.sayfaliPipeline({ vt: 'FikoYT.sistem.denetim', ...this.firmaMatch(firmaId) }, { tarih: -1 }, sayfa, limit),\r\n );\r\n return this.sayfaliSonucCoz(sonuc);\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { FikoYTService } from '@/src/service/fikoyt.service';\r\nimport { FikoYTRequestService } from '@/src/app/shared/services/fikoyt-request.service';\r\nimport { escapeRegex } from '@/src/app/uygulamalar/yuz-tanima/utils/regex.utils';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AdminService {\r\n private FikoYT = inject(FikoYTService);\r\n private req = inject(FikoYTRequestService);\r\n\r\n /** Public aggregate - disaridan kullanan bilesenler icin wrapper */\r\n aggregate(komut: string, pipeline: any[]): Promise {\r\n return this.req.aggregate(komut, pipeline);\r\n }\r\n\r\n // Dashboard metrikleri\r\n async dashboardMetrikleri(): Promise {\r\n const [kullaniciSayisi, icerikSayisi, kuyrukDurumu, yuzIstatistik] = await Promise.all([\r\n this.kullaniciSayisi(),\r\n this.icerikSayisi(),\r\n this.kuyrukDurumu(),\r\n this.yuzTanimaIstatistik(),\r\n ]);\r\n return { kullaniciSayisi, icerikSayisi, kuyrukDurumu, yuzIstatistik };\r\n }\r\n\r\n async kullaniciSayisi(): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n { $match: { silindi: { $ne: true } } },\r\n { $count: 'toplam' },\r\n ]);\r\n return sonuc?.[0]?.toplam || 0;\r\n }\r\n\r\n async icerikSayisi(): Promise<{ toplam: number; bugun: number }> {\r\n const bugun = new Date();\r\n bugun.setHours(0, 0, 0, 0);\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n bugun: [\r\n { $match: { olusturulmaTarihi: { $gte: bugun.toISOString() } } },\r\n { $count: 'sayi' },\r\n ],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n bugun: facet?.bugun?.[0]?.sayi || 0,\r\n };\r\n }\r\n\r\n async kuyrukDurumu(): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_kuyruk.aggregate', [\r\n { $group: { _id: '$durum', sayi: { $sum: 1 } } },\r\n ]);\r\n const durumlar: any = { bekliyor: 0, isleniyor: 0, tamamlandi: 0, hata: 0 };\r\n (sonuc || []).forEach((d: any) => {\r\n if (durumlar.hasOwnProperty(d._id)) durumlar[d._id] = d.sayi;\r\n });\r\n return durumlar;\r\n }\r\n\r\n async yuzTanimaIstatistik(): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_tespit.aggregate', [\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n toplamYuz: [{ $group: { _id: null, sayi: { $sum: '$yuz_sayisi' } } }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplamTespit: facet?.toplam?.[0]?.sayi || 0,\r\n toplamYuz: facet?.toplamYuz?.[0]?.sayi || 0,\r\n };\r\n }\r\n\r\n // Kullanici listesi\r\n async kullaniciListesi(sayfa = 1, limit = 20, filtre?: any): Promise {\r\n const pipeline: any[] = [\r\n { $match: { silindi: { $ne: true }, ...(filtre || {}) } },\r\n { $sort: { olusturulmaTarihi: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n let: { uid: '$_id' },\r\n pipeline: [\r\n { $match: { $expr: { $eq: ['$sahip', '$$uid'] }, silindi: { $ne: true } } },\r\n { $count: 'sayi' },\r\n ],\r\n as: '_icerik',\r\n },\r\n },\r\n { $addFields: { icerikSayisi: { $ifNull: [{ $arrayElemAt: ['$_icerik.sayi', 0] }, 0] } } },\r\n {\r\n $project: {\r\n kullaniciAdi: 1,\r\n 'veri.pilesmi': 1,\r\n 'veri.ePosta': 1,\r\n 'veri.resimId': 1,\r\n 'veri.cinsiyet': 1,\r\n yetkiler: 1,\r\n aktifDurum: 1,\r\n olusturulmaTarihi: 1,\r\n sonGiris: 1,\r\n banBilgi: 1,\r\n icerikSayisi: 1,\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ];\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', pipeline);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Yuz tanima kuyruk listesi\r\n async kuyrukListesi(sayfa = 1, limit = 20, durumFiltre?: string): Promise {\r\n const match: any = {};\r\n if (durumFiltre) match.durum = durumFiltre;\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_kuyruk.aggregate', [\r\n { $match: match },\r\n { $sort: { olusturma: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'kullanici_id',\r\n foreignField: '_id',\r\n as: 'kullanici',\r\n },\r\n },\r\n { $unwind: { path: '$kullanici', preserveNullAndEmptyArrays: true } },\r\n {\r\n $addFields: {\r\n kullaniciAdi: '$kullanici.kullaniciAdi',\r\n kullaniciResimId: '$kullanici.veri.resimId',\r\n resim_id: { $toString: '$resim_id' },\r\n kullanici_id: { $toString: '$kullanici_id' },\r\n tarih: { $ifNull: ['$tarih', '$olusturma'] },\r\n },\r\n },\r\n { $project: { kullanici: 0 } },\r\n ],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Taninan kisiler listesi\r\n async taninanKisiler(sayfa = 1, limit = 20): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_taninan.aggregate', [\r\n { $sort: { ad: 1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [{ $skip: (sayfa - 1) * limit }, { $limit: limit }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Tespit gecmisi\r\n async tespitGecmisi(sayfa = 1, limit = 20): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_tespit.aggregate', [\r\n { $sort: { tarih: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [{ $skip: (sayfa - 1) * limit }, { $limit: limit }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Tespit bilgisi (resim_id ile)\r\n async tespitByResimId(resimId: string): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_tespit.aggregate', [\r\n { $match: { resim_id: resimId } },\r\n { $limit: 1 },\r\n ]);\r\n return sonuc?.[0] || null;\r\n }\r\n\r\n // Son aktiviteler\r\n async sonAktiviteler(limit = 10): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $sort: { olusturulmaTarihi: -1 } },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'sahip',\r\n foreignField: '_id',\r\n as: 'kullanici',\r\n },\r\n },\r\n { $unwind: { path: '$kullanici', preserveNullAndEmptyArrays: true } },\r\n {\r\n $project: {\r\n sahip: 1,\r\n tur: 1,\r\n 'ek.turu': 1,\r\n olusturulmaTarihi: 1,\r\n kullaniciAdi: '$kullanici.kullaniciAdi',\r\n pilesmi: '$kullanici.veri.pilesmi',\r\n cinsiyet: '$kullanici.veri.cinsiyet',\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n // Kullanici rol guncelle\r\n async rolGuncelle(kullaniciId: string, yetkiler: string[]): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle',\r\n { _id: kullaniciId },\r\n { $set: { yetkiler } },\r\n );\r\n }\r\n\r\n // Kullanicinin uygulama erisimi + alt ozellik izinleri + fiyat override (goUyeler.veri)\r\n async kullaniciUygulamaErisim(kullaniciId: string): Promise<{ uygulamalar: string[]; altlar: string[]; fiyatlar: Record }> {\r\n const r = await this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n { $match: { _id: kullaniciId } }, { $project: { 'veri.uygulamalar': 1, 'veri.uygulamaAltlari': 1, 'veri.fiyatlar': 1 } }, { $limit: 1 },\r\n ]);\r\n return { uygulamalar: r?.[0]?.veri?.uygulamalar || [], altlar: r?.[0]?.veri?.uygulamaAltlari || [], fiyatlar: r?.[0]?.veri?.fiyatlar || {} };\r\n }\r\n // Kullanicinin uygulama + alt ozellik erisimi + fiyat override guncelle\r\n async uygulamaErisimGuncelle(kullaniciId: string, uygulamalar: string[], altlar: string[], fiyatlar?: Record): Promise {\r\n const set: any = { 'veri.uygulamalar': uygulamalar, 'veri.uygulamaAltlari': altlar };\r\n if (fiyatlar) set['veri.fiyatlar'] = fiyatlar;\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle', { _id: kullaniciId }, { $set: set });\r\n }\r\n\r\n // Workbench + komut lisansi (oku) + fiyat override (veri.fiyatlar ortak)\r\n async kullaniciLisans(kullaniciId: string): Promise<{ workbenchler: string[]; komutlar: string[]; fiyatlar: Record }> {\r\n const r = await this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n { $match: { _id: kullaniciId } }, { $project: { 'veri.workbenchler': 1, 'veri.komutlar': 1, 'veri.fiyatlar': 1 } }, { $limit: 1 },\r\n ]);\r\n return { workbenchler: r?.[0]?.veri?.workbenchler || [], komutlar: r?.[0]?.veri?.komutlar || [], fiyatlar: r?.[0]?.veri?.fiyatlar || {} };\r\n }\r\n // Workbench + komut lisansi (guncelle) + fiyat override\r\n async lisansGuncelle(kullaniciId: string, workbenchler: string[], komutlar: string[], fiyatlar?: Record): Promise {\r\n const set: any = { 'veri.workbenchler': workbenchler, 'veri.komutlar': komutlar };\r\n if (fiyatlar) set['veri.fiyatlar'] = fiyatlar;\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle', { _id: kullaniciId }, { $set: set });\r\n }\r\n\r\n // Kullanici durum guncelle\r\n async durumGuncelle(kullaniciId: string, aktif: boolean): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle',\r\n { _id: kullaniciId },\r\n { $set: { aktifDurum: aktif ? 'Aktif' : 'Pasif' } },\r\n );\r\n }\r\n\r\n // Yuz tanima kisi sil (cascade: orphan referanslari temizle)\r\n async yuzKisiSil(kisiId: string): Promise {\r\n // 1. Kisiyi yuz_taninan koleksiyonundan sil\r\n const sonuc = await this.req.sil('FikoYT.sistem.DB.yuz_taninan.sil', { _id: kisiId });\r\n // 2. yuz_tespit koleksiyonundaki orphan eslesen_kisi_id referanslarini temizle\r\n // eslesen_kisi_id, yuzler[] array'inin icindeki objelerde bir alan.\r\n // $unset ile $[elem] kullanildiginda arrayFilters zorunludur,\r\n // aksi halde MongoDB hata verir. arrayFilters eksenel parametresinde gonderilir.\r\n try {\r\n await this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { 'yuzler.eslesen_kisi_id': kisiId },\r\n { $unset: { 'yuzler.$[elem].eslesen_kisi_id': '' } },\r\n { arrayFilters: [{ 'elem.eslesen_kisi_id': kisiId }] },\r\n );\r\n } catch {}\r\n return sonuc;\r\n }\r\n\r\n // Bilinmeyen yuzler (etiketlenmemis tespitler - kisi_id'si olmayan)\r\n async bilinmeyenYuzler(sayfa = 1, limit = 20): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.yuz_tespit.aggregate', [\r\n { $unwind: '$yuzler' },\r\n { $match: { 'yuzler.eslesen_kisi_id': { $exists: false } } },\r\n { $sort: { tarih: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n {\r\n $project: {\r\n resim_id: 1,\r\n tarih: 1,\r\n bbox: '$yuzler.bbox',\r\n descriptor: '$yuzler.descriptor',\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Toplu yuz etiketle (delegated to yuzEtiketle at bottom)\r\n\r\n // Kisi icin yuz tespitlerini al (eslesen_kisi_id uzerinden)\r\n async kisiTespitleri(kisiId: string, limit = 20): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.yuz_tespit.aggregate', [\r\n { $unwind: { path: '$yuzler', preserveNullAndEmptyArrays: false } },\r\n { $match: { 'yuzler.eslesen_kisi_id': kisiId } },\r\n { $sort: { tarih: -1 } },\r\n { $limit: limit },\r\n {\r\n $project: {\r\n resim_id: 1,\r\n icerik_id: 1,\r\n tarih: 1,\r\n resim_boyut: 1,\r\n bbox: '$yuzler.bbox',\r\n mesafe: '$yuzler.mesafe',\r\n guven: '$yuzler.guven',\r\n eslesen_kisi_id: '$yuzler.eslesen_kisi_id',\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n // Kisi birlestir: hedef kisi altinda birlestir\r\n async yuzKisiBirlestir(hedefId: string, kaynakId: string): Promise {\r\n // 1. Tespitlerde kaynak ID'yi hedef ID ile degistir\r\n // $[elem] kullanildigi icin arrayFilters zorunlu\r\n await this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { 'yuzler.eslesen_kisi_id': kaynakId },\r\n { $set: { 'yuzler.$[elem].eslesen_kisi_id': hedefId } },\r\n { arrayFilters: [{ 'elem.eslesen_kisi_id': kaynakId }] },\r\n );\r\n // 2. Kaynak kisiyi sil\r\n return this.req.sil('FikoYT.sistem.DB.yuz_taninan.sil', { _id: kaynakId });\r\n }\r\n\r\n // Kisi guncelle (ad, descriptor vb.)\r\n async yuzKisiGuncelle(kisiId: string, veri: any): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_taninan.guncelle',\r\n { _id: kisiId },\r\n { $set: veri },\r\n );\r\n }\r\n\r\n // Kuyruk ogesi sil\r\n async kuyrukSil(filter: any): Promise {\r\n return this.req.sil('FikoYT.sistem.DB.yuz_kuyruk.sil', filter);\r\n }\r\n\r\n // Kuyruk ogesi durumunu guncelle\r\n async kuyrukDurumGuncelle(kuyrukId: string, durum: string, deneme = 0): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_kuyruk.guncelle',\r\n { _id: kuyrukId },\r\n { $set: { durum, deneme } },\r\n );\r\n }\r\n\r\n // Kuyruk toplu durum guncelle (orn: tüm 'isleniyor' → 'bekliyor')\r\n async kuyrukTopluDurumGuncelle(eskiDurum: string, yeniDurum: string): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_kuyruk.guncelle',\r\n { durum: eskiDurum },\r\n { $set: { durum: yeniDurum, deneme: 0 } },\r\n );\r\n }\r\n\r\n // ===== MODERASYON =====\r\n\r\n // Raporlanan icerikler\r\n async raporlananIcerikler(sayfa = 1, limit = 20, durumFiltre?: string, sebepFiltre?: string): Promise {\r\n const match: any = {};\r\n if (durumFiltre && durumFiltre !== 'hepsi') match.durum = durumFiltre;\r\n if (sebepFiltre) match.sebep = sebepFiltre;\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.raporlar.aggregate', [\r\n { $match: match },\r\n { $sort: { tarih: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'hareketler',\r\n localField: 'icerikId',\r\n foreignField: '_id',\r\n as: 'icerik',\r\n },\r\n },\r\n { $unwind: { path: '$icerik', preserveNullAndEmptyArrays: true } },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'raporEden',\r\n foreignField: '_id',\r\n as: 'raporEdenKullanici',\r\n },\r\n },\r\n { $unwind: { path: '$raporEdenKullanici', preserveNullAndEmptyArrays: true } },\r\n ],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Rapor durumu guncelle\r\n async raporDurumGuncelle(raporId: string, durum: string, moderatorNot?: string): Promise {\r\n const set: any = { durum, incelenmeTarihi: new Date().toISOString() };\r\n if (moderatorNot) set.moderatorNot = moderatorNot;\r\n return this.req.guncelle('FikoYT.sistem.DB.raporlar.guncelle',\r\n { _id: raporId },\r\n { $set: set },\r\n );\r\n }\r\n\r\n // Icerik sil (moderasyon)\r\n async icerikSil(icerikId: string): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { _id: icerikId },\r\n { $set: { silindi: true, silinmeTarihi: new Date().toISOString() } },\r\n );\r\n }\r\n\r\n // Kullanici uyar\r\n async kullaniciUyar(kullaniciId: string, sebep: string, seviye: 'uyari' | 'ciddi' | 'son'): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.kullanici_uyarilari.ekle', {\r\n kullaniciId,\r\n sebep,\r\n seviye,\r\n tarih: new Date().toISOString(),\r\n });\r\n }\r\n\r\n // Kullanici uyarilari\r\n async kullaniciUyarilari(kullaniciId: string): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.kullanici_uyarilari.aggregate', [\r\n { $match: { kullaniciId } },\r\n { $sort: { tarih: -1 } },\r\n { $limit: 50 },\r\n ]);\r\n }\r\n\r\n // Kullanici banla/askiya al\r\n async kullaniciBanla(kullaniciId: string, tur: 'ban' | 'askiya_al', sure?: number, sebep?: string): Promise {\r\n const set: any = {\r\n aktifDurum: tur === 'ban' ? 'Banlandi' : 'Askida',\r\n banBilgi: {\r\n tur,\r\n sebep: sebep || '',\r\n baslangic: new Date().toISOString(),\r\n bitis: sure ? new Date(Date.now() + sure * 86400000).toISOString() : null,\r\n },\r\n };\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle',\r\n { _id: kullaniciId },\r\n { $set: set },\r\n );\r\n }\r\n\r\n // Ban kaldir\r\n async banKaldir(kullaniciId: string): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.goUyeler.guncelle',\r\n { _id: kullaniciId },\r\n { $set: { aktifDurum: 'Aktif' }, $unset: { banBilgi: '' } },\r\n );\r\n }\r\n\r\n // Banlanan kullanicilar\r\n async banlananKullanicilar(sayfa = 1, limit = 20): Promise {\r\n return this.kullaniciListesi(sayfa, limit, {\r\n aktifDurum: { $in: ['Banlandi', 'Askida'] },\r\n });\r\n }\r\n\r\n // ===== DASHBOARD GELISMIS =====\r\n\r\n // Gunluk icerik trendi (son N gun)\r\n async icerikTrendi(gunSayisi = 7): Promise {\r\n const baslangic = new Date();\r\n baslangic.setDate(baslangic.getDate() - gunSayisi);\r\n baslangic.setHours(0, 0, 0, 0);\r\n return this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { olusturulmaTarihi: { $gte: baslangic.toISOString() }, silindi: { $ne: true } } },\r\n {\r\n $group: {\r\n _id: { $substr: ['$olusturulmaTarihi', 0, 10] },\r\n sayi: { $sum: 1 },\r\n },\r\n },\r\n { $sort: { _id: 1 } },\r\n ]);\r\n }\r\n\r\n // Kullanici buyume trendi\r\n async kullaniciBuyume(gunSayisi = 30): Promise {\r\n const baslangic = new Date();\r\n baslangic.setDate(baslangic.getDate() - gunSayisi);\r\n baslangic.setHours(0, 0, 0, 0);\r\n return this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n { $match: { olusturulmaTarihi: { $gte: baslangic.toISOString() } } },\r\n {\r\n $group: {\r\n _id: { $substr: ['$olusturulmaTarihi', 0, 10] },\r\n sayi: { $sum: 1 },\r\n },\r\n },\r\n { $sort: { _id: 1 } },\r\n ]);\r\n }\r\n\r\n // Icerik turu dagilimi\r\n async icerikTuruDagilimi(): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { silindi: { $ne: true } } },\r\n { $group: { _id: '$ek.turu', sayi: { $sum: 1 } } },\r\n { $sort: { sayi: -1 } },\r\n ]);\r\n }\r\n\r\n // Rapor istatistikleri\r\n async raporIstatistikleri(): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.raporlar.aggregate', [\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n bekleyen: [{ $match: { durum: 'bekliyor' } }, { $count: 'sayi' }],\r\n durumlar: [{ $group: { _id: '$durum', sayi: { $sum: 1 } } }],\r\n sebepler: [{ $group: { _id: '$sebep', sayi: { $sum: 1 } } }, { $sort: { sayi: -1 } }, { $limit: 5 }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n bekleyen: facet?.bekleyen?.[0]?.sayi || 0,\r\n durumlar: facet?.durumlar || [],\r\n sebepler: facet?.sebepler || [],\r\n };\r\n }\r\n\r\n // En aktif kullanicilar\r\n async enAktifKullanicilar(limit = 5): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { silindi: { $ne: true } } },\r\n { $group: { _id: '$sahip', sayi: { $sum: 1 } } },\r\n { $sort: { sayi: -1 } },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: '_id',\r\n foreignField: '_id',\r\n as: 'kullanici',\r\n },\r\n },\r\n { $unwind: { path: '$kullanici', preserveNullAndEmptyArrays: true } },\r\n {\r\n $project: {\r\n sayi: 1,\r\n kullaniciAdi: '$kullanici.kullaniciAdi',\r\n pilesmi: '$kullanici.veri.pilesmi',\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n // Denetim kaydi ekle\r\n async denetimKaydiEkle(islem: string, detay: any): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.denetim_kaydi.ekle', {\r\n islem,\r\n detay,\r\n tarih: new Date().toISOString(),\r\n moderator: this.FikoYT.kimlik.aktifKullaniciJson()?._id,\r\n });\r\n }\r\n\r\n // Denetim kayitlari\r\n async denetimKayitlari(sayfa = 1, limit = 20): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.denetim_kaydi.aggregate', [\r\n { $sort: { tarih: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [{ $skip: (sayfa - 1) * limit }, { $limit: limit }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // Denetim kayitlari + moderator adi ($lookup goUyeler)\r\n async denetimKayitlariZengin(sayfa = 1, limit = 20): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.denetim_kaydi.aggregate', [\r\n { $sort: { tarih: -1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n {\r\n $lookup: {\r\n from: 'goUyeler',\r\n localField: 'moderator',\r\n foreignField: '_id',\r\n as: 'moderatorBilgi',\r\n },\r\n },\r\n { $unwind: { path: '$moderatorBilgi', preserveNullAndEmptyArrays: true } },\r\n {\r\n $addFields: {\r\n moderatorAdi: { $ifNull: ['$moderatorBilgi.veri.pilesmi', '$moderatorBilgi.kullaniciAdi'] },\r\n },\r\n },\r\n { $project: { moderatorBilgi: 0 } },\r\n ],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n // ===== BILINMEYEN YUZLER =====\r\n\r\n // Yuz tespitindeki bir yuzun etiketini (eslesmeler) kaldir\r\n // tespitId: tespit kaydinin _id'si, yuzId: lightbox'tan gelen yuz.id (genelde \"tespitId_yuz_0\" formunda)\r\n // bbox parametresi opsiyonel: eger yuzId'den tespit bulunamazsa bbox ile eslestirme yapilir\r\n async yuzTespitEtiketSil(tespitId: string, yuzId?: string, bbox?: number[]): Promise {\r\n // yuzId formatini parse et: \"TESPIT_ID_yuz_INDEX\" seklinde olabilir\r\n let gercekTespitId = tespitId;\r\n let yuzIndex = -1;\r\n if (yuzId) {\r\n const parts = yuzId.split('_yuz_');\r\n if (parts.length === 2) {\r\n gercekTespitId = parts[0];\r\n yuzIndex = parseInt(parts[1], 10);\r\n }\r\n }\r\n\r\n if (yuzIndex >= 0) {\r\n // Direkt index ile eslesmeler'i kaldir\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { _id: gercekTespitId },\r\n { $unset: { [`yuzler.${yuzIndex}.eslesmeler`]: '' } },\r\n );\r\n }\r\n\r\n // Fallback: bbox ile eslestirme\r\n if (bbox && bbox.length >= 4) {\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { _id: gercekTespitId, 'yuzler.bbox': bbox },\r\n { $unset: { 'yuzler.$.eslesmeler': '' } },\r\n );\r\n }\r\n\r\n // Son fallback: tespitId parametresini _id olarak kullan, ilk yuzun etiketini kaldir\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { _id: tespitId },\r\n { $unset: { 'yuzler.0.eslesmeler': '' } },\r\n );\r\n }\r\n\r\n // Yuz tespitindeki yuze eslesme etiketi ekle\r\n async yuzEtiketle(tespitId: string, bbox: number[], kisiId: string, kisiAd: string): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.yuz_tespit.guncelle',\r\n { _id: tespitId, 'yuzler.bbox': bbox },\r\n { $set: { 'yuzler.$.eslesmeler': [{ ad: kisiAd, kisi_id: kisiId, mesafe: 0 }] } },\r\n );\r\n }\r\n\r\n // Yeni taninan kisi olustur\r\n async yeniKisiOlustur(veri: any): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.yuz_taninan.ekle', veri);\r\n }\r\n\r\n // ===== HMI PERSONEL + KART YONETIMI =====\r\n\r\n async hmiPersonelListesi(sayfa = 1, limit = 50, filtre?: any): Promise {\r\n const pipeline: any[] = [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { silindi: { $ne: true }, ...(filtre || {}) } },\r\n { $sort: { isim: 1, soyisim: 1 } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n liste: [\r\n { $skip: (sayfa - 1) * limit },\r\n { $limit: limit },\r\n ],\r\n },\r\n },\r\n ];\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', pipeline);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n liste: facet?.liste || [],\r\n };\r\n }\r\n\r\n async hmiUyeAra(arama: string, limit = 10): Promise {\r\n const regex = { $regex: escapeRegex(arama), $options: 'i' };\r\n return this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n {\r\n $match: {\r\n silindi: { $ne: true },\r\n $or: [\r\n { kullaniciAdi: regex },\r\n { 'veri.pilesmi': regex },\r\n { 'veri.ePosta': regex },\r\n ],\r\n },\r\n },\r\n { $limit: limit },\r\n {\r\n $project: {\r\n kullaniciAdi: 1,\r\n 'veri.pilesmi': 1,\r\n 'veri.ePosta': 1,\r\n 'veri.resimId': 1,\r\n 'veri.cinsiyet': 1,\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n async hmiAlanOnerileri(alan: string): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { silindi: { $ne: true }, [alan]: { $exists: true, $ne: '' } } },\r\n { $group: { _id: `$${alan}` } },\r\n { $sort: { _id: 1 } },\r\n { $limit: 100 },\r\n ]);\r\n return (sonuc || []).map((d: any) => d._id).filter(Boolean);\r\n }\r\n\r\n async hmiPersonelEkle(veri: any): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.hareketler.ekle', {\r\n ...veri,\r\n vt: 'FikoYT.sistem.firma.personeller',\r\n aktif: true,\r\n olusturulmaTarihi: new Date().toISOString(),\r\n });\r\n }\r\n\r\n async hmiPersonelGuncelle(personelId: string, veri: any): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { _id: personelId },\r\n { $set: { ...veri, guncellemeTarihi: new Date().toISOString() } },\r\n );\r\n }\r\n\r\n async hmiPersonelSil(personelId: string): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { _id: personelId },\r\n { $set: { silindi: true, silinmeTarihi: new Date().toISOString() } },\r\n );\r\n }\r\n\r\n async hmiKartSorgula(kartUid: string): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { kartUid, aktif: true, silindi: { $ne: true } } },\r\n { $limit: 1 },\r\n ]);\r\n const personel = sonuc?.[0] || null;\r\n if (!personel?.kullaniciAdi) return personel;\r\n\r\n // FikoYT uye profilinden isim, soyisim, profilResmi cek\r\n try {\r\n const uye = await this.req.aggregate('FikoYT.sistem.DB.goUyeler.aggregate', [\r\n { $match: { kullaniciAdi: personel.kullaniciAdi } },\r\n { $limit: 1 },\r\n ]);\r\n const u = uye?.[0];\r\n if (u) {\r\n personel._uyeIsim = u.isim || '';\r\n personel._uyeSoyisim = u.soyIsim || '';\r\n personel._uyeResimId = u.profilResmi || '';\r\n }\r\n } catch {}\r\n\r\n return personel;\r\n }\r\n\r\n async hmiKartUidKontrol(kartUid: string, haricId?: string): Promise {\r\n const match: any = { kartUid, silindi: { $ne: true } };\r\n if (haricId) match._id = { $ne: haricId };\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller', ...match } },\r\n { $count: 'sayi' },\r\n ]);\r\n return (sonuc?.[0]?.sayi || 0) > 0;\r\n }\r\n\r\n async hmiIstatistikler(): Promise {\r\n const sonuc = await this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.firma.personeller' } },\r\n { $match: { silindi: { $ne: true } } },\r\n {\r\n $facet: {\r\n toplam: [{ $count: 'sayi' }],\r\n aktif: [{ $match: { aktif: true } }, { $count: 'sayi' }],\r\n kartli: [{ $match: { kartUid: { $exists: true, $ne: '' } } }, { $count: 'sayi' }],\r\n roller: [{ $group: { _id: '$rol', sayi: { $sum: 1 } } }, { $sort: { sayi: -1 } }],\r\n },\r\n },\r\n ]);\r\n const facet = sonuc?.[0];\r\n return {\r\n toplam: facet?.toplam?.[0]?.sayi || 0,\r\n aktif: facet?.aktif?.[0]?.sayi || 0,\r\n kartli: facet?.kartli?.[0]?.sayi || 0,\r\n roller: facet?.roller || [],\r\n };\r\n }\r\n\r\n // ============ CİHAZ GÜNCELLEMELERİ ============\r\n\r\n async cihazGuncelle(cihazId: string, veri: any): Promise {\r\n return this.req.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { _id: cihazId },\r\n { $set: { ...veri, guncellenmeTarihi: new Date().toISOString() } },\r\n );\r\n }\r\n\r\n // ============ IoT OLAY KAYITLARI ============\r\n\r\n /** Tüm IoT olaylarını saniye hassasiyetinde logla */\r\n async iotOlayKaydet(olay: {\r\n tip: string; // 'kart_koyuldu' | 'kart_cekildi' | 'cihaz_baglandi' | 'cihaz_koptu' | ...\r\n kartUid?: string;\r\n cihazKimlik?: string;\r\n cihazTipi?: string;\r\n personelId?: string;\r\n personelIsim?: string;\r\n detay?: any;\r\n }): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.hareketler.ekle', {\r\n ...olay,\r\n vt: 'FikoYT.sistem.cihaz.olaylar',\r\n zaman: new Date().toISOString(),\r\n zamanMs: Date.now(),\r\n });\r\n }\r\n\r\n /** Giriş/çıkış kaydı (PDKS) */\r\n async girisCikisKaydet(data: {\r\n kartUid: string;\r\n personelId?: string;\r\n personelIsim?: string;\r\n tur: 'giris' | 'cikis';\r\n cihazKimlik?: string;\r\n }): Promise {\r\n return this.req.ekle('FikoYT.sistem.DB.hareketler.ekle', {\r\n ...data,\r\n vt: 'FikoYT.sistem.giris_cikis',\r\n zaman: new Date().toISOString(),\r\n zamanMs: Date.now(),\r\n });\r\n }\r\n\r\n /** Son olay kayıtlarını getir */\r\n async iotOlaylarGetir(limit = 100): Promise {\r\n return this.req.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.cihaz.olaylar' } },\r\n { $sort: { zamanMs: -1 } },\r\n { $limit: limit },\r\n ]);\r\n }\r\n\r\n // ============ ADMIN ÜYE + PAROLA ============\r\n\r\n // Admin: gecici parola ile uye ekle\r\n async kullaniciEkle(veri: {\r\n kullaniciAdi: string; isim: string; soyIsim: string; ePosta: string;\r\n yetkiler: string[]; geciciParola: string; epostaGonder: boolean;\r\n }): Promise<{ basari: boolean; kid?: string; mesaj?: string }> {\r\n const { FikoYTIstekKok } = await import('@/src/service/modules/fikoyt-istek-kok/fikoyt.istek.makinesi.service');\r\n const istek = new FikoYTIstekKok({ metod: 'POST', komut: 'FikoYT.sistem.admin.uye.ekle' });\r\n const fd = new FormData();\r\n fd.append('req_body', JSON.stringify(veri));\r\n istek.parametreler = fd;\r\n try {\r\n await istek.isteSync();\r\n if (istek.cevap?.durum?.hata) {\r\n const hatalar = istek.cevap?.durum?.hatalar || [];\r\n //@ts-ignore\r\n const mesaj = hatalar.map((h: any) => h?.mesaj).filter(Boolean).join(' / ') || istek.cevap?.durum?.mesaj || 'Bilinmeyen sunucu hatasi';\r\n console.error('[kullaniciEkle] backend hata dondu:', hatalar, istek.cevap);\r\n return { basari: false, mesaj };\r\n }\r\n const s = (istek.cevap?.sonuc ?? istek.cevap) || {};\r\n if (!s.basari) {\r\n console.warn('[kullaniciEkle] basari=false, tam cevap:', istek.cevap);\r\n }\r\n return { basari: !!s.basari, kid: s.kid, mesaj: s.mesaj };\r\n } catch (err) {\r\n console.error('[kullaniciEkle] istek atilirken exception:', err);\r\n return { basari: false, mesaj: 'Istek gonderilirken beklenmeyen hata olustu' };\r\n }\r\n }\r\n\r\n // Oturumdaki kullanicinin parolasini degistir\r\n async sifreDegistir(mevcutParola: string, yeniParola: string, yeniParolaTekrar: string): Promise<{ basari: boolean }> {\r\n const { FikoYTIstekKok } = await import('@/src/service/modules/fikoyt-istek-kok/fikoyt.istek.makinesi.service');\r\n const istek = new FikoYTIstekKok({ metod: 'POST', komut: 'FikoYT.sistem.sifre.degistir' });\r\n const fd = new FormData();\r\n fd.append('req_body', JSON.stringify({ mevcutParola, yeniParola, yeniParolaTekrar }));\r\n istek.parametreler = fd;\r\n try {\r\n await istek.isteSync();\r\n if (istek.cevap?.durum?.hata) return { basari: false };\r\n const s = (istek.cevap?.sonuc ?? istek.cevap) || {};\r\n return { basari: !!s.basari };\r\n } catch {\r\n return { basari: false };\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n\r\n \r\n
\r\n
📟
\r\n

FikoYT

\r\n

Endüstriyel IoT Sistemi

\r\n
\r\n\r\n \r\n @if (asama() === 'hosgeldiniz') {\r\n
\r\n
\r\n

HMI Saha Ekranı

\r\n

Bu ekranı fabrika veya üretim alanındaki bilgi paneli olarak kullanabilirsiniz

\r\n
\r\n
\r\n
\r\n 🪪\r\n
Kart OkuyucuNFC/RFID ile personel giriş-çıkış takibi
\r\n
\r\n
\r\n 📊\r\n
Canlı GöstergelerÜretim verileri, istatistikler ve duyurular
\r\n
\r\n
\r\n 🏭\r\n
Firma EntegrasyonuFirmanıza özel logo, tema ve yapılandırma
\r\n
\r\n
\r\n 🔒\r\n
Güvenli BağlantıYönetici onayı ile cihaz eşleştirme
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'kaydediliyor') {\r\n
\r\n
\r\n
\r\n

Cihaz Kaydediliyor...

\r\n

Sisteme kayıt oluşturuluyor

\r\n
\r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'aktivasyon-bekliyor') {\r\n
\r\n
\r\n
\r\n
\r\n ⏳\r\n
\r\n

Yönetici Onayı Bekleniyor

\r\n

Bu cihaz sisteme kaydedildi. Yöneticinizin admin panelinden bu cihazı bir firmaya ataması ve aktifleştirmesi gerekiyor.

\r\n\r\n
\r\n
Cihaz Kimliği
\r\n
{{ cihazKimlik }}
\r\n
\r\n\r\n
\r\n
\r\n
✓
\r\n Kayıt\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Onay\r\n
\r\n
\r\n
\r\n
3
\r\n Aktif\r\n
\r\n
\r\n\r\n
\r\n
\r\n Canlı takip ediliyorr...\r\n
\r\n\r\n \r\n
\r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'kod-girisi') {\r\n
\r\n
\r\n 🔑\r\n

Aktivasyon Kodu

\r\n

Yöneticinizden aldığınız 6 haneli kodu giriniz

\r\n
\r\n
\r\n @for (i of [0,1,2,3,4,5]; track i) {\r\n \r\n }\r\n
\r\n @if (hataMesaji()) {\r\n
⚠️ {{ hataMesaji() }}
\r\n }\r\n \r\n
\r\n 💻\r\n Cihaz: {{ cihazKimlik }}\r\n
\r\n \r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'dogrulaniyor') {\r\n
\r\n
\r\n
\r\n

Doğrulanıyor...

\r\n

Aktivasyon kodu kontrol ediliyor

\r\n
\r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'basarili') {\r\n
\r\n
\r\n
✅
\r\n

Aktivasyon Başarılı!

\r\n

{{ aktivFirmaAdi() }}

\r\n
\r\n
Cihaz Adı{{ aktivCihazAdi() }}
\r\n
Uygulama Modu{{ aktivMod() }}
\r\n
Konum{{ aktivKonum() || '-' }}
\r\n
\r\n
{{ geriSayim() }} saniye içinde yönlendiriliyorsunuz...
\r\n
\r\n
\r\n }\r\n\r\n \r\n @if (asama() === 'hata') {\r\n
\r\n
\r\n ❌\r\n

İşlem Başarısız

\r\n

{{ hataMesaji() || 'Geçersiz veya süresi dolmuş kod' }}

\r\n \r\n
\r\n
\r\n }\r\n\r\n
\r\n FikoYT Endüstriyel IoT Platform\r\n •\r\n v2.0\r\n
\r\n
\r\n","import {\r\n Component, ChangeDetectionStrategy, inject, signal, OnInit, OnDestroy,\r\n ViewChildren, QueryList, ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { FikoYTKokBilesenComponent } from '@service/kok-bilesen/kok-bilesen.component';\r\nimport { FirmaService } from '../../firma-yonetim/services/firma.service';\r\nimport { AdminService } from '../../admin/services/admin.service';\r\nimport { FikoYTRequestService } from '@/src/app/shared/services/fikoyt-request.service';\r\nimport { setCihazKimlik, setCihazDurum } from '../../../guards/cihaz.guard';\r\nimport { CihazAktivasyonSocketService } from '../services/cihaz-aktivasyon-socket.service';\r\n\r\ntype Asama = 'hosgeldiniz' | 'kaydediliyor' | 'aktivasyon-bekliyor' | 'kod-girisi' | 'dogrulaniyor' | 'basarili' | 'hata';\r\n\r\nconst CIHAZ_KAYIT_KEY = 'fikoyt_hmi_kayit';\r\n\r\n@Component({\r\n selector: 'hmi-aktivasyon',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './aktivasyon.component.html',\r\n styleUrl: './aktivasyon.component.less',\r\n})\r\nexport class HmiAktivasyonComponent extends FikoYTKokBilesenComponent implements OnInit, OnDestroy {\r\n @ViewChildren('haneInput') haneInputs!: QueryList>;\r\n\r\n private firmaService = inject(FirmaService);\r\n private adminService = inject(AdminService);\r\n private req = inject(FikoYTRequestService);\r\n private aktivasyonSocket = inject(CihazAktivasyonSocketService);\r\n\r\n constructor() { super(); }\r\n\r\n asama = signal('hosgeldiniz');\r\n kodHaneler: string[] = ['', '', '', '', '', ''];\r\n aktifHane = signal(0);\r\n hataMesaji = signal('');\r\n\r\n aktivFirmaAdi = signal('');\r\n aktivCihazAdi = signal('');\r\n aktivMod = signal('');\r\n aktivKonum = signal('');\r\n\r\n geriSayim = signal(5);\r\n pollingCount = signal(0);\r\n private geriSayimTimer: any;\r\n private pollingTimer: any;\r\n private socketSub: Subscription | null = null;\r\n\r\n cihazKimlik = this.getCihazKimlik();\r\n\r\n async ngOnInit() {\r\n // Zaten aktif/askida cihaz kaydı varsa → doğrudan HMI pano'ya yönlendir\r\n const mevcutKimlik = localStorage.getItem('fikoyt_cihaz_kimlik');\r\n const mevcutConfig = localStorage.getItem('fikoyt_cihaz_konfig');\r\n if (mevcutKimlik && mevcutConfig) {\r\n this.router.navigate(['/hmi-pano/pano']);\r\n return;\r\n }\r\n\r\n // Sadece kimlik varsa ama config yoksa da kurtarmayı dene\r\n if (mevcutKimlik) {\r\n const mevcutDurum = localStorage.getItem('fikoyt_cihaz_durum');\r\n if (mevcutDurum === 'aktif' || mevcutDurum === 'askida') {\r\n this.router.navigate(['/hmi-pano/pano']);\r\n return;\r\n }\r\n }\r\n\r\n // HW kimlik var ama cihaz kaydı silinmiş olabilir (eski askida/iptal kodu temizlemiş)\r\n // DB'den kontrol et, aktif/askıdaysa otomatik kurtar — AWAIT ile bekle\r\n await this.otomatikKurtar();\r\n\r\n // Önceki kayıt var mı kontrol et\r\n const kayit = this.mevcutKayitOku();\r\n if (kayit) {\r\n this.asama.set('aktivasyon-bekliyor');\r\n this.durumKontrolBaslat();\r\n }\r\n }\r\n\r\n /** HW kimliği DB'de aktif/askıda varsa localStorage'ı kurtarıp pano'ya yönlendir */\r\n private async otomatikKurtar() {\r\n try {\r\n const hwKimlik = this.cihazKimlik;\r\n if (!hwKimlik) return;\r\n\r\n console.log('[Aktivasyon] otomatikKurtar baslatildi, hwKimlik:', hwKimlik);\r\n\r\n const { FikoYTIstekKok } = await import('@/src/service/modules/fikoyt-istek-kok/fikoyt.istek.makinesi.service');\r\n const istek = new FikoYTIstekKok({\r\n metod: 'POST',\r\n komut: 'FikoYT.sistem.DB.hareketler.aggregate',\r\n });\r\n // Basit sorgu — $lookup/$unwind kullanma (backend uyumsuzluğu riski)\r\n istek.parametreler = {\r\n aggregate: [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { cihazKimlik: hwKimlik, aktivasyonDurumu: { $in: ['aktif', 'askida'] } } },\r\n { $sort: { _id: -1 } },\r\n { $limit: 1 },\r\n ],\r\n };\r\n await istek.isteSync();\r\n const sonuc = istek.cevap?.sonuc;\r\n const cihaz = Array.isArray(sonuc) ? sonuc[0] : null;\r\n\r\n console.log('[Aktivasyon] otomatikKurtar sonucu:', cihaz ? 'bulundu' : 'bulunamadi', cihaz?.aktivasyonDurumu);\r\n\r\n if (cihaz) {\r\n console.log('[Aktivasyon] Cihaz DB\\'de bulundu, otomatik kurtarılıyor:', cihaz.aktivasyonDurumu);\r\n // localStorage'ı geri doldur\r\n setCihazKimlik(hwKimlik);\r\n setCihazDurum(cihaz.aktivasyonDurumu || 'aktif');\r\n localStorage.setItem('fikoyt_cihaz_konfig', JSON.stringify({\r\n _id: cihaz._id,\r\n firmaId: cihaz.firmaId,\r\n uygulamaModu: cihaz.uygulamaModu,\r\n cihazAdi: cihaz.cihazAdi,\r\n konum: cihaz.konum,\r\n kartOkuyucu: cihaz.kartOkuyucu,\r\n konfigurasyon: cihaz.konfigurasyon,\r\n }));\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n // Pano'ya yönlendir — guard artık geçirecek\r\n this.router.navigate(['/hmi-pano/pano']);\r\n }\r\n } catch (e) {\r\n console.warn('[Aktivasyon] Otomatik kurtarma hatası:', e);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n clearInterval(this.geriSayimTimer);\r\n clearInterval(this.pollingTimer);\r\n this.socketSub?.unsubscribe();\r\n }\r\n\r\n // ════════ SELF-REGISTRATION ════════\r\n\r\n async cihazKaydet() {\r\n this.asama.set('kaydediliyor');\r\n try {\r\n const mevcutKontrol = await this.adminService.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { cihazKimlik: this.cihazKimlik } },\r\n { $sort: { _id: -1 } },\r\n { $limit: 1 },\r\n ]);\r\n if (mevcutKontrol?.length > 0) {\r\n const mevcut = mevcutKontrol[0];\r\n if (mevcut.aktivasyonDurumu === 'iptal') {\r\n await this.req.guncelle('FikoYT.sistem.DB.hareketler.guncelle',\r\n { _id: mevcut._id },\r\n { $set: { aktivasyonDurumu: 'bekliyor', cevrimiciMi: true, olusturulmaTarihi: new Date().toISOString() } },\r\n );\r\n this.aktivasyonSocket.bildir({\r\n tip: 'aktivasyon_yeni_kayit',\r\n cihaz_kimlik: this.cihazKimlik,\r\n cihaz_adi: mevcut.cihazAdi || this.cihazKimlik,\r\n durum: 'bekliyor',\r\n });\r\n }\r\n localStorage.setItem(CIHAZ_KAYIT_KEY, JSON.stringify({\r\n cihazKimlik: this.cihazKimlik,\r\n kayitZamani: new Date().toISOString(),\r\n }));\r\n this.asama.set('aktivasyon-bekliyor');\r\n this.durumKontrolBaslat();\r\n return;\r\n }\r\n\r\n // DB'ye kaydet\r\n await this.adminService.iotOlayKaydet({\r\n tip: 'cihaz_kayit_istegi',\r\n cihazKimlik: this.cihazKimlik,\r\n detay: {\r\n userAgent: navigator.userAgent.slice(0, 100),\r\n ekran: `${screen.width}x${screen.height}`,\r\n },\r\n });\r\n\r\n // hareketler'e bekleyen kayıt oluştur\r\n const { FikoYTIstekKok } = await import('@/src/service/modules/fikoyt-istek-kok/fikoyt.istek.makinesi.service');\r\n const istek = new FikoYTIstekKok({ metod: 'POST', komut: 'FikoYT.sistem.DB.hareketler.ekle' });\r\n const fd = new FormData();\r\n fd.append('req_body', JSON.stringify({\r\n vt: 'FikoYT.sistem.cihazlar',\r\n cihazKimlik: this.cihazKimlik,\r\n cihazAdi: this.cihazKimlik,\r\n aktivasyonDurumu: 'bekliyor',\r\n uygulamaModu: 'pdks',\r\n firmaId: '',\r\n cevrimiciMi: true,\r\n donanim: {\r\n isletimSistemi: navigator.platform,\r\n ekranBoyutu: `${screen.width}x${screen.height}`,\r\n },\r\n konfigurasyon: {},\r\n olusturulmaTarihi: new Date().toISOString(),\r\n }));\r\n istek.parametreler = fd;\r\n await istek.isteSync();\r\n\r\n // localStorage'a kaydet\r\n localStorage.setItem(CIHAZ_KAYIT_KEY, JSON.stringify({\r\n cihazKimlik: this.cihazKimlik,\r\n kayitZamani: new Date().toISOString(),\r\n }));\r\n\r\n // Socket.IO ile admin panele bildir\r\n this.aktivasyonSocket.bildir({\r\n tip: 'aktivasyon_yeni_kayit',\r\n cihaz_kimlik: this.cihazKimlik,\r\n cihaz_adi: this.cihazKimlik,\r\n durum: 'bekliyor',\r\n });\r\n\r\n this.asama.set('aktivasyon-bekliyor');\r\n this.durumKontrolBaslat();\r\n } catch (e) {\r\n console.error('[HMI] Kayıt hatası:', e);\r\n this.hataMesaji.set('Cihaz kaydedilemedi, lütfen tekrar deneyin');\r\n this.asama.set('hata');\r\n }\r\n }\r\n\r\n /** Socket.IO ile canlı aktivasyon takibi + 30s fallback polling */\r\n private durumKontrolBaslat() {\r\n this.pollingCount.set(0);\r\n clearInterval(this.pollingTimer);\r\n\r\n // 1) Socket.IO ile anlık dinleme\r\n this.socketSub?.unsubscribe();\r\n this.aktivasyonSocket.dinlemeBasla();\r\n this.socketSub = this.aktivasyonSocket\r\n .cihazOlaylari$(this.cihazKimlik)\r\n .subscribe(olay => {\r\n if (olay.tip === 'aktivasyon_durum_degisti') {\r\n if (olay.durum === 'aktif' || olay.durum === 'askida') {\r\n clearInterval(this.pollingTimer);\r\n setCihazKimlik(this.cihazKimlik);\r\n setCihazDurum(olay.durum);\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n this.aktivFirmaAdi.set(olay.firma_adi || 'Firma');\r\n this.aktivCihazAdi.set(olay.cihaz_adi || this.cihazKimlik);\r\n this.aktivMod.set(olay.uygulama_modu || '');\r\n this.aktivKonum.set(olay.konum || '');\r\n this.asama.set('basarili');\r\n this.basariliYonlendir();\r\n } else if (olay.durum === 'iptal') {\r\n // Admin iptal etti — kaydı sıfırla, hoşgeldiniz ekranına dön\r\n clearInterval(this.pollingTimer);\r\n this.socketSub?.unsubscribe();\r\n this.socketSub = null;\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n this.nzMessage.warning('Cihaz kaydı yönetici tarafından iptal edildi');\r\n this.asama.set('hosgeldiniz');\r\n }\r\n }\r\n });\r\n\r\n // 2) Fallback polling (30s) — Socket.IO bağlantısı koparsa\r\n this.pollingTimer = setInterval(() => {\r\n this.pollingCount.update(c => c + 1);\r\n this.durumKontrolEt();\r\n }, 30000);\r\n\r\n // İlk kontrolü hemen yap\r\n this.durumKontrolEt();\r\n }\r\n\r\n private async durumKontrolEt() {\r\n try {\r\n // En son kaydı al ($lookup/$unwind kullanma — backend uyumsuzluk riski)\r\n const sonuc = await this.adminService.aggregate('FikoYT.sistem.DB.hareketler.aggregate', [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { cihazKimlik: this.cihazKimlik } },\r\n { $sort: { _id: -1 } },\r\n { $limit: 1 },\r\n ]);\r\n\r\n const cihaz = sonuc?.[0];\r\n if (!cihaz) return; // Henüz kayıt oluşmamış, beklemeye devam\r\n\r\n if (cihaz.aktivasyonDurumu === 'iptal') {\r\n // En son kayıt iptal edilmiş — hoşgeldiniz ekranına dön\r\n clearInterval(this.pollingTimer);\r\n this.socketSub?.unsubscribe();\r\n this.socketSub = null;\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n this.nzMessage.warning('Cihaz kaydı yönetici tarafından iptal edildi');\r\n this.asama.set('hosgeldiniz');\r\n return;\r\n }\r\n\r\n if (cihaz.aktivasyonDurumu === 'aktif' || cihaz.aktivasyonDurumu === 'askida') {\r\n clearInterval(this.pollingTimer);\r\n // Aktif veya askida — localStorage'a yaz ve yönlendir (shell overlay halleder)\r\n setCihazKimlik(this.cihazKimlik);\r\n setCihazDurum(cihaz.aktivasyonDurumu);\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n\r\n this.aktivFirmaAdi.set(cihaz.firmaAdi || 'Firma');\r\n this.aktivCihazAdi.set(cihaz.cihazAdi || this.cihazKimlik);\r\n this.aktivMod.set(cihaz.uygulamaModu || '');\r\n this.aktivKonum.set(cihaz.konum || '');\r\n this.asama.set('basarili');\r\n this.basariliYonlendir();\r\n }\r\n } catch {}\r\n }\r\n\r\n kaydiIptalEt() {\r\n clearInterval(this.pollingTimer);\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n this.asama.set('hosgeldiniz');\r\n }\r\n\r\n // ════════ KOD GİRİŞ (ALTERNATİF) ════════\r\n\r\n kodTam(): boolean {\r\n return this.kodHaneler.every(h => h.length === 1);\r\n }\r\n\r\n haneGirildi(event: Event, idx: number) {\r\n const input = event.target as HTMLInputElement;\r\n let val = input.value.toUpperCase().replace(/[^A-Z0-9]/g, '');\r\n if (val.length > 1) val = val.charAt(val.length - 1);\r\n this.kodHaneler[idx] = val;\r\n this.hataMesaji.set('');\r\n if (val && idx < 5) {\r\n this.aktifHane.set(idx + 1);\r\n setTimeout(() => { this.haneInputs?.toArray()?.[idx + 1]?.nativeElement?.focus(); });\r\n }\r\n }\r\n\r\n tusKontrol(event: KeyboardEvent, idx: number) {\r\n if (event.key === 'Backspace') {\r\n if (!this.kodHaneler[idx] && idx > 0) {\r\n this.kodHaneler[idx - 1] = '';\r\n this.aktifHane.set(idx - 1);\r\n setTimeout(() => { this.haneInputs?.toArray()?.[idx - 1]?.nativeElement?.focus(); });\r\n } else { this.kodHaneler[idx] = ''; }\r\n } else if (event.key === 'Enter' && this.kodTam()) {\r\n this.kodDogrula();\r\n } else if (event.key === 'ArrowLeft' && idx > 0) {\r\n this.aktifHane.set(idx - 1);\r\n this.haneInputs?.toArray()?.[idx - 1]?.nativeElement?.focus();\r\n } else if (event.key === 'ArrowRight' && idx < 5) {\r\n this.aktifHane.set(idx + 1);\r\n this.haneInputs?.toArray()?.[idx + 1]?.nativeElement?.focus();\r\n }\r\n }\r\n\r\n yapistir(event: ClipboardEvent) {\r\n event.preventDefault();\r\n const text = (event.clipboardData?.getData('text') || '').toUpperCase().replace(/[^A-Z0-9]/g, '');\r\n if (text.length < 6) return;\r\n for (let i = 0; i < 6; i++) this.kodHaneler[i] = text.charAt(i);\r\n this.aktifHane.set(5);\r\n setTimeout(() => { this.haneInputs?.toArray()?.[5]?.nativeElement?.focus(); });\r\n }\r\n\r\n async kodDogrula() {\r\n if (!this.kodTam()) return;\r\n const kod = this.kodHaneler.join('');\r\n this.asama.set('dogrulaniyor');\r\n try {\r\n const sonuc = await this.firmaService.cihazAktivasyonDogrula(kod, this.cihazKimlik);\r\n if (!sonuc) {\r\n this.asama.set('hata');\r\n this.hataMesaji.set('Geçersiz veya süresi dolmuş aktivasyon kodu');\r\n return;\r\n }\r\n setCihazKimlik(this.cihazKimlik);\r\n localStorage.removeItem(CIHAZ_KAYIT_KEY);\r\n this.aktivFirmaAdi.set(sonuc.firma?.firmaAdi || 'Firma');\r\n this.aktivCihazAdi.set(sonuc.cihazAdi || '');\r\n this.aktivMod.set(sonuc.uygulamaModu || '');\r\n this.aktivKonum.set(sonuc.konum || '');\r\n this.asama.set('basarili');\r\n this.basariliYonlendir();\r\n } catch {\r\n this.asama.set('hata');\r\n this.hataMesaji.set('Sunucu hatası — lütfen tekrar deneyin');\r\n }\r\n }\r\n\r\n sifirla() {\r\n this.kodHaneler = ['', '', '', '', '', ''];\r\n this.aktifHane.set(0);\r\n this.hataMesaji.set('');\r\n this.asama.set('hosgeldiniz');\r\n clearInterval(this.geriSayimTimer);\r\n }\r\n\r\n geriDon() {\r\n this.router.navigate(['/']);\r\n }\r\n\r\n // ════════ YARDIMCI ════════\r\n\r\n private basariliYonlendir() {\r\n this.geriSayim.set(5);\r\n this.geriSayimTimer = setInterval(() => {\r\n const kalan = this.geriSayim() - 1;\r\n this.geriSayim.set(kalan);\r\n if (kalan <= 0) {\r\n clearInterval(this.geriSayimTimer);\r\n this.router.navigate(['/hmi-pano/pano']);\r\n }\r\n }, 1000);\r\n }\r\n\r\n private mevcutKayitOku(): { cihazKimlik: string; kayitZamani: string } | null {\r\n try {\r\n const raw = localStorage.getItem(CIHAZ_KAYIT_KEY);\r\n return raw ? JSON.parse(raw) : null;\r\n } catch { return null; }\r\n }\r\n\r\n private getCihazKimlik(): string {\r\n const storageKey = 'fikoyt_cihaz_hw_kimlik';\r\n let kimlik = localStorage.getItem(storageKey);\r\n if (kimlik) return kimlik;\r\n const parts = [\r\n navigator.userAgent.slice(0, 20),\r\n screen.width, screen.height, screen.colorDepth,\r\n new Date().getTime().toString(36),\r\n Math.random().toString(36).slice(2, 8),\r\n ];\r\n kimlik = 'HMI-' + this.hashCode(parts.join('|')).toString(16).toUpperCase();\r\n localStorage.setItem(storageKey, kimlik);\r\n return kimlik;\r\n }\r\n\r\n private hashCode(str: string): number {\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0;\r\n }\r\n return Math.abs(hash);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}