-- ============================================================================
-- Project: NE1aW 온압센서
-- Document: dbo.EOL Table Schema (Latest Version)
-- Author: Antigravity AI
-- Date: 2026-06-24
-- Description: 개편된 로그인 사양 및 16개 컬럼 결과 저장 구조에 맞춘 스키마.
--              제품 일련번호(IC_SN)를 주 식별자로 사용하며,
--              동일 제품 재검사 시 MERGE 문을 이용해 UPSERT 처리됩니다.
-- ============================================================================

-- 1. 데이터베이스 존재 여부 확인 및 자동 생성
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'NE1aW_PT_SENSOR')
BEGIN
    CREATE DATABASE [NE1aW_PT_SENSOR];
    PRINT 'Database [NE1aW_PT_SENSOR] created successfully.';
END
GO

USE [NE1aW_PT_SENSOR];
GO

-- 2. 기존 테이블이 존재할 경우 삭제
IF OBJECT_ID('dbo.EOL', 'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.EOL;
    PRINT 'Existing [dbo].[EOL] table dropped.';
END
GO

-- 3. 개편된 테이블 생성
CREATE TABLE [dbo].[EOL] (
    [IC_SN]             NVARCHAR(10)        NOT NULL, -- 제품의 최종 조합 ID (ProductId) (기본키)
    [PCB_Barcode]       NVARCHAR(10)        NOT NULL, -- 고유 식별용 바코드 정보 (UK)
    [Maker]             NVARCHAR(10)        NULL,     -- 로그인 메이커 정보
    [Model]             NVARCHAR(10)        NULL,     -- 로그인 모델 정보
    [Variant_1]         NVARCHAR(10)        NULL,     -- 로그인 변형1 정보
    [Variant_2]         NVARCHAR(10)        NULL,     -- 로그인 변형2 정보
    [Operator]          NVARCHAR(10)        NOT NULL, -- 로그인 검사자 ID
    [Production_Date]   DATETIME2(0)        NOT NULL DEFAULT GETDATE(), -- 검사 일시
    [Line]              NVARCHAR(5)         NULL,     -- 로그인 작업 라인
    [Lot_No]            NVARCHAR(8)         NULL,     -- 로그인 Lot 번호
    [Jig_No]            NVARCHAR(10)        NULL,     -- 로그인 지그 번호
    [Channel]           NVARCHAR(5)         NOT NULL, -- 검증 수행 채널 (LEFT / RIGHT)
    [Spec_UL]           DECIMAL(3,2)        NOT NULL, -- 스펙 상한값
    [Spec_LL]           DECIMAL(3,2)        NOT NULL, -- 스펙 하한값
    [Leak_Value]        DECIMAL(5,4)        NOT NULL, -- 측정된 누설량
    [Result]            NVARCHAR(5)         NOT NULL, -- 합격 여부 판정 (OK / NG)

    CONSTRAINT [PK_EOL_IC_SN] PRIMARY KEY CLUSTERED ([IC_SN] ASC),
    CONSTRAINT [UQ_EOL_PCB_Barcode] UNIQUE ([PCB_Barcode] ASC)
);
GO

PRINT 'Table [dbo].[EOL] created successfully with latest 16 columns and IC_SN as Primary Key.';
GO


-- ============================================================================
-- [부록] 테스트 시나리오 SQL 예시 (신규 개편 버전)
-- ============================================================================
/*
-- 1. 테스트용 기본 데이터 INSERT (정상 삽입)
INSERT INTO [dbo].[EOL] (
    [IC_SN], [PCB_Barcode], [Maker], [Model], [Variant_1], [Variant_2], 
    [Operator], [Production_Date], [Line], [Lot_No], [Jig_No], [Channel], 
    [Spec_UL], [Spec_LL], [Leak_Value], [Result]
)
VALUES (
    'SN00000001', 'SN00000001', 'MAKER_A', 'MODEL_X', 'V1', 'V2', 
    'OP_01', '2026-06-24 11:00:00', 'L1', 'LOT00001', 'JIG01', 'LEFT', 
    1.00, -1.00, 0.1250, 'OK'
);

-- 데이터 확인
SELECT * FROM [dbo].[EOL];

-- 2. 동일 IC_SN 재검사 시 MERGE 문을 이용한 UPSERT 테스트 (정상 업데이트 확인)
-- 예상 결과: 기존 'SN00000001' 레코드의 Leak_Value가 '0.0980'으로 업데이트되고, Production_Date 등이 갱신됨
MERGE INTO [dbo].[EOL] AS Target
USING (SELECT 'SN00000001' AS IC_SN) AS Source
ON (Target.IC_SN = Source.IC_SN)
WHEN MATCHED THEN
    UPDATE SET 
        Target.PCB_Barcode = 'SN00000001',
        Target.Maker = 'MAKER_A',
        Target.Model = 'MODEL_X',
        Target.Variant_1 = 'V1',
        Target.Variant_2 = 'V2',
        Target.Operator = 'OP_01',
        Target.Production_Date = '2026-06-24 11:05:00',
        Target.Line = 'L1',
        Target.Lot_No = 'LOT00001',
        Target.Jig_No = 'JIG01',
        Target.Channel = 'LEFT',
        Target.Spec_UL = 1.00,
        Target.Spec_LL = -1.00,
        Target.Leak_Value = 0.0980, -- 업데이트될 새 값
        Target.Result = 'OK'
WHEN NOT MATCHED THEN
    INSERT (IC_SN, PCB_Barcode, Maker, Model, Variant_1, Variant_2, Operator, Production_Date, Line, Lot_No, Jig_No, Channel, Spec_UL, Spec_LL, Leak_Value, Result)
    VALUES ('SN00000001', 'SN00000001', 'MAKER_A', 'MODEL_X', 'V1', 'V2', 'OP_01', '2026-06-24 11:05:00', 'L1', 'LOT00001', 'JIG01', 'LEFT', 1.00, -1.00, 0.0980, 'OK');

-- 데이터 확인 (값 업데이트 확인)
SELECT * FROM [dbo].[EOL];
*/
