@g1cloud/entity-modeler-next 5.2.20 → 5.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,6 +24,11 @@ export interface PDbAttr {
24
24
  updatable?: boolean;
25
25
  /** JPA @Column(insertable=…). undefined=기본 따름. v1 레거시엔 없는 신규 옵션. */
26
26
  insertable?: boolean;
27
+ /**
28
+ * JPA @Column(nullable=false) — **이 컬럼 하나의** NOT NULL. undefined=속성 축(`notNull`)을 따름.
29
+ * 논리 모델 `DbColumn.notNull` 직렬화(그 주석이 축의 정본). v1 레거시엔 없는 신규 옵션.
30
+ */
31
+ notNull?: boolean;
27
32
  /**
28
33
  * 공유 통화 컬럼(SHARED_REF) — 같은 엔터티 내 다른 컬럼 modelId 참조(read-only 투영, 물리 컬럼 0).
29
34
  * 논리 모델 DbColumn.sharedColumnRef 직렬화. FK 전파용 targetModelId와는 별개 개념. v1 레거시 없음.
@@ -154,6 +154,13 @@ export interface EmbeddableColumnOverride {
154
154
  insertable?: boolean;
155
155
  /** JPA @Column(updatable=). OWN 컬럼에만 저장(SHARED_REF는 타깃 파생). */
156
156
  updatable?: boolean;
157
+ /**
158
+ * JPA @Column(nullable=false) — **이 서브컬럼 하나의** NOT NULL. 미설정이면 속성 축(`notNull`)을 따른다.
159
+ * ★임베더블은 컬럼마다 제약이 갈릴 수 있고(실측: `ChangedBy` 의 type 컬럼만 `NOT NULL`) 속성 축 하나로는
160
+ * 그 비대칭을 담을 수 없다 — 그래서 서브컬럼 축이 있다(SoT=`core/types.ts` `DbColumn.notNull`).
161
+ * OWN 컬럼에만 저장(SHARED_REF는 타깃 파생).
162
+ */
163
+ notNull?: boolean;
157
164
  /**
158
165
  * SHARED_REF — 이 서브컬럼이 자체 물리 컬럼을 갖지 않고 같은 엔터티의 다른 컬럼(**물리명**)을 공유해
159
166
  * read-only 투영됨(대표: Money의 currency가 별도 스칼라 통화 컬럼 공유). 설정 시 resolver가 그 물리명을
@@ -89,6 +89,26 @@ export declare function resolveEffectiveColumn(attr: Attribute, col: DbColumn, i
89
89
  *
90
90
  * ⚠️판정은 **내용 유무**다(`??` 아님) — 빈 객체 `{}` 가 폴백을 조용히 막는 것을 피한다.
91
91
  */
92
+ /**
93
+ * **실효 NOT NULL** — 컬럼 축(`DbColumn.notNull`)이 설정돼 있으면 그것, 아니면 속성 축(`Attribute.notNull`).
94
+ *
95
+ * ★`effectiveLogicalName` 과 **같은 형상**이다 — 두 저장 자리를 한 값으로 접는 단일 출처이고 **컬럼이
96
+ * 이긴다**(더 구체적인 자리). 다른 점은 폴백 방향의 «원천»뿐이다: 논리명·타입·길이는 *선언원*(카탈로그·
97
+ * 임베더블·부모 PK)에서 상속하지만(`resolveEffectiveColumn`), NOT NULL 은 **자기 속성**에서 내려온다
98
+ * — 카탈로그 필드에 그 축이 없고(실물 `@Embeddable` 이 `nullable` 을 대개 지정하지 않는다) 제약의
99
+ * 소유자는 «사용처»이기 때문이다(같은 임베더블이 어떤 테이블에선 NOT NULL, 다른 곳에선 nullable).
100
+ *
101
+ * ⚠️판정은 `?? `(nullish)다 — 저장 라운드트립이 미설정을 `null` 로 바꾸므로 `!== undefined` 로 읽으면
102
+ * `null` 을 «false 설정»으로 오독한다(이 리포의 wire clear 규약: *「저장값 null 을 엄격 비교로 읽지 말 것」*).
103
+ *
104
+ * ★`identifier` 는 여기서 보지 않는다 — PK 는 소비처마다 다르게 다룬다(DDL 은 `NOT NULL` 을 생략하고
105
+ * PK 제약으로 표현, 코드젠은 `@Id` 를 낸다) ⇒ 그 판단을 이 함수로 끌어오면 두 소비처가 어긋난다.
106
+ */
107
+ export declare function effectiveNotNull(attr: {
108
+ notNull?: boolean;
109
+ }, col: {
110
+ notNull?: boolean;
111
+ } | undefined): boolean;
92
112
  export declare function effectiveEntityLogicalName(entity: {
93
113
  classLogicalName?: MultiLangText;
94
114
  table?: {
@@ -175,6 +175,26 @@ export interface DbColumn {
175
175
  updatable?: boolean;
176
176
  /** JPA @Column(insertable=…). undefined=기본 따름. v1 레거시엔 없는 신규 옵션. */
177
177
  insertable?: boolean;
178
+ /**
179
+ * JPA `@Column(nullable=false)` — **이 컬럼 하나의** NOT NULL. `undefined`(=미설정)면 속성 축
180
+ * (`Attribute.notNull`)을 따른다(`updatable`·`insertable` 과 같은 **inherit 3-상태**).
181
+ *
182
+ * ★**왜 컬럼 축이 필요한가**: `Attribute.notNull` 은 속성당 하나뿐인데 **한 속성이 N컬럼**인 자리
183
+ * (`EMBED_PREDEF`·`EMBED_OWN`)에서는 컬럼마다 제약이 갈릴 수 있다. 실측 계기 = `ChangedBy` 값 타입
184
+ * 병합 6엔티티(`ItemInventoryHistory`·`OfflineOrderHistory`·`Claim`·`ClaimHistory`·`OrderHistory`·
185
+ * `RefundChangeHist`) — **DDL 이 `changed_by_type_code` 를 `NOT NULL`, `changed_by_id` 를 nullable 로
186
+ * 확증**하는데 두 스칼라 속성을 하나로 병합하면 그 비대칭을 담을 데가 없어 **DB 로 확증된 제약이 사라졌다**.
187
+ *
188
+ * ★해소는 **`columnResolve.effectiveNotNull` 단일 출처**로만 읽는다 — 소비처가 넷이다(DDL `NOT NULL` ·
189
+ * 코드젠 `@Column(nullable=false)` · `CHK-TYPE-8`[nullable × 원시 타입] · 표시 배지). 이 모듈이 생긴
190
+ * 이유가 정확히 *「상속 해소가 소비처마다 제각각이어서 DDL 만 raw 를 읽었다」* 이므로 재기술 금지.
191
+ *
192
+ * ⚠️**op patch 에서 «평탄» 키로 오면 안 된다** — `notNull` 은 `DBATTR_FLAT_KEYS` 에 **넣지 않는다**.
193
+ * 그 집합은 평탄 키를 컬럼으로 내려보내는데(`resolver.ts`), `notNull` 은 이미 **속성 레벨 평탄 키**라
194
+ * 넣으면 기존 `attribute.update {notNull}` 이 조용히 컬럼으로 납치된다(두 축이 같은 이름을 쓰는 유일한
195
+ * 자리다). 컬럼 축은 **dotted `dbAttrs.<i>.notNull`** 또는 `embeddableOverrides[].notNull` 로만 쓴다.
196
+ */
197
+ notNull?: boolean;
178
198
  /**
179
199
  * 공유 통화 컬럼(SHARED_REF) — 이 컬럼이 자체 물리 컬럼을 갖지 않고 같은 엔터티의 다른 컬럼을
180
200
  * **modelId로 참조**해 그 물리 컬럼에 read-only 투영됨을 뜻한다(예: Money embeddable의 currency