feat: VIN textbox WMI marka ikonu + WMI haritasını shared'e taşı/genişlet
- WMI_BRAND_MAP + getBrandFromWmi packages/shared'e taşındı (tek kaynak); corgi.service artık buradan import ediyor (davranış aynı, testler geçiyor) - VinBrandIcon: VIN'in WMI'ı bilinen markaya denk gelince büyüteç yerine marka logosu pop animasyonuyla görünür (landing + search VIN textbox) - WMI haritasına prod DB'de decode edilmiş VIN'lerden 23 eksik WMI eklendi (Türkiye fabrikaları NM4/NMT/NLA/NLH/NMB dahil; tüm DB WMI'ları artık tanınıyor) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Injectable, Logger } from "@nestjs/common";
|
||||
import { WMI_BRAND_MAP } from "@sase/shared";
|
||||
|
||||
interface CorgiDecodeResult {
|
||||
brandName: string;
|
||||
@@ -7,105 +8,6 @@ interface CorgiDecodeResult {
|
||||
isKnown: boolean;
|
||||
}
|
||||
|
||||
const WMI_DATABASE: Record<string, string> = {
|
||||
// BMW
|
||||
WBA: "BMW",
|
||||
WBS: "BMW",
|
||||
WBY: "BMW",
|
||||
"5UX": "BMW",
|
||||
// Mercedes-Benz
|
||||
WDB: "Mercedes-Benz",
|
||||
WDC: "Mercedes-Benz",
|
||||
WDD: "Mercedes-Benz",
|
||||
WDF: "Mercedes-Benz",
|
||||
// Audi
|
||||
WAU: "Audi",
|
||||
WUA: "Audi",
|
||||
// Volkswagen
|
||||
WVW: "Volkswagen",
|
||||
WVG: "Volkswagen",
|
||||
"3VW": "Volkswagen",
|
||||
WV1: "Volkswagen",
|
||||
WV2: "Volkswagen",
|
||||
WV3: "Volkswagen",
|
||||
// Toyota
|
||||
JTD: "Toyota",
|
||||
JTE: "Toyota",
|
||||
JTN: "Toyota",
|
||||
"2T1": "Toyota",
|
||||
"4T1": "Toyota",
|
||||
// Fiat
|
||||
ZFA: "Fiat",
|
||||
ZFC: "Fiat",
|
||||
// Renault
|
||||
VF1: "Renault",
|
||||
VF2: "Renault",
|
||||
// Peugeot
|
||||
VF3: "Peugeot",
|
||||
VR3: "Peugeot", // newer Stellantis-era WMI
|
||||
VR7: "Peugeot", // newer Stellantis-era WMI
|
||||
// Citroen
|
||||
VF7: "Citroen",
|
||||
VR1: "Citroen", // newer Citroën/DS WMI
|
||||
// Honda
|
||||
JHM: "Honda",
|
||||
SHH: "Honda",
|
||||
"1HG": "Honda",
|
||||
// Hyundai
|
||||
KMH: "Hyundai",
|
||||
"5NP": "Hyundai",
|
||||
// Kia
|
||||
KNA: "Kia",
|
||||
KND: "Kia",
|
||||
// Ford
|
||||
WF0: "Ford",
|
||||
NM0: "Ford",
|
||||
"1FA": "Ford",
|
||||
"3FA": "Ford",
|
||||
// Opel
|
||||
W0L: "Opel",
|
||||
W0V: "Opel", // newer Stellantis-era WMI
|
||||
// Skoda
|
||||
TMB: "Skoda",
|
||||
// Seat
|
||||
VSS: "Seat",
|
||||
// Volvo
|
||||
YV1: "Volvo",
|
||||
// Nissan
|
||||
JN1: "Nissan",
|
||||
"1N4": "Nissan",
|
||||
"3N1": "Nissan",
|
||||
// Mazda
|
||||
JMZ: "Mazda",
|
||||
JM1: "Mazda",
|
||||
JM3: "Mazda",
|
||||
// Porsche
|
||||
WP0: "Porsche",
|
||||
WP1: "Porsche",
|
||||
// Land Rover
|
||||
SAL: "Land Rover",
|
||||
// Jaguar
|
||||
SAJ: "Jaguar",
|
||||
// Mini
|
||||
WMW: "Mini",
|
||||
// Dacia
|
||||
UU1: "Dacia",
|
||||
// Subaru
|
||||
JF1: "Subaru",
|
||||
JF2: "Subaru",
|
||||
// Suzuki
|
||||
JS2: "Suzuki",
|
||||
JS3: "Suzuki",
|
||||
TSM: "Suzuki",
|
||||
MA3: "Suzuki",
|
||||
MBH: "Suzuki",
|
||||
// Mitsubishi
|
||||
JMB: "Mitsubishi",
|
||||
JMY: "Mitsubishi",
|
||||
MMB: "Mitsubishi",
|
||||
ML3: "Mitsubishi",
|
||||
};
|
||||
|
||||
const YEAR_MAP: Record<string, number> = {
|
||||
A: 2010,
|
||||
B: 2011,
|
||||
@@ -148,7 +50,7 @@ export class CorgiService {
|
||||
if (upper.length !== 17) return null;
|
||||
|
||||
const wmi = upper.substring(0, 3);
|
||||
const brandName = WMI_DATABASE[wmi];
|
||||
const brandName = WMI_BRAND_MAP[wmi];
|
||||
|
||||
if (!brandName) {
|
||||
this.logger.warn(`Unknown WMI: ${wmi}`);
|
||||
@@ -169,6 +71,6 @@ export class CorgiService {
|
||||
}
|
||||
|
||||
getBrandFromWmi(wmi: string): string | null {
|
||||
return WMI_DATABASE[wmi.toUpperCase()] ?? null;
|
||||
return WMI_BRAND_MAP[wmi.toUpperCase()] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user