Serverkit Compiler Module Package - Executable Boilerplate
npm install @serverkit-lib/executable-boilerplate!version
!Node.js
!build
!license
이 모듈(executable-boilerplate)은 컴파일 프로젝트에서 유저가 생성한 서버를 만들기 위한 기능들을 제공합니다.
---
DBM의 경우 DB를 생성할 dbconfig 데이터와 테이블을 생성할 TableInfo의 정보가 필요합니다.
컴파일을 할 때 DB의 정보는 dbconfig에 맞게 데이터를 받아야 합니다.
DB를 생성할 때 필요한 정보입니다.
``tsx`
const netdata: CNet_DBSet = new CNet_DBSet(IConnectionBase, ClientDbm);
netdata.PrismaSetting();
IConnectionBase는 사용하는 DB에 따라 SQLite와 PostgreSQL로 나뉩니다.
`tsx
export enum DBProvider {
SQLite = 0,
PostgreSQL = 1
}
// 데이터베이스 연결 정보를 나타내는 기본 인터페이스
export interface IConnectionBase {
provider: DBProvider; // 데이터베이스 제공자 (e.g., 0: SQLite, 1: PostgreSQL)
}
// SQLite 데이터베이스 연결 정보를 나타내는 인터페이스
export interface IConnectionSqlite extends IConnectionBase {
fileName: string; // SQLite 데이터베이스 파일 이름
}
// PostgreSQL 데이터베이스 연결 정보를 나타내는 인터페이스
export interface IConnectionPostgreSql extends IConnectionBase {
id: string; // PostgreSQL 사용자 ID
password: string; // PostgreSQL 비밀번호
url: string; // PostgreSQL 호스트 URL
port: number; // PostgreSQL 포트
database: string; // PostgreSQL 데이터베이스 이름
}
`
---
`tsx`
export interface Asset {
id: string;
name: string;
fileFormatVersion: string;
ideFormatVersion: string;
description: string;
}
---
`tsx`
export interface DbmAsset extends Asset {
data: ClientDbm;
}
`tsx`
export interface ClientDbm {
tableName: string; // 테이블의 이름
fields: SCM.IDBField; // Model을 구성하는 Field의 정보
}
`tsx`
export interface IDBField {
name: string; // 컬럼 이름
type: string; // 자료형
attribute: IAttribute; // 제약사항
next?: IDBField[]; // relation의 경우 추가되는 Model
configs?: IDbConfig; // config 정보
}
`tsx`
export interface IAttribute {
canBeNull: boolean; // null 허용 여부
isArray: boolean; // List 여부
}
`tsx`
export interface IDbConfig {
defaultValue?: string; // 기본값
isUnique?: boolean; // 유니크 체크 여부
}
executable-boilerplate의 VQM namespace는 .vqm 확장자가 지정한 Visual Query를 생성하고 동적 module을 하기 위한 기능입니다.
`typescript
let querymanager: CVisualQueryManager = new CVisualQueryManager(IVisualQueryPhaseList[]);
// js 파일 생성
const buildList: Array
for (const build of buildList) {
fs.writeFileSync(path.join(prismapath, ${build.fileName}), build.buildData);
}
const index_str = querymanager.VQIndexJS();
fs.writeFileSync(path.join(prismapath, "index.js"), index_str);
const global_prisma = querymanager.VQGlobalPrisma();
fs.writeFileSync(path.join(prismapath, "prisma.js"), global_prisma);
`
CVisualQueryManager는 VQM의 모든 상황을 담당하는 클래스입니다.
CVisualQueryManager의 매개변수로 IVisualQueryPhaseList에 대한 정보가 필요합니다. 자세한 내용은 [컴파일 인터페이스]의 VQM을 참고하세요.
1. VQIndexJS()
- 위에서 생성된 모듈을 정리하여 포함하는 index.js 파일을 생성하는 함수입니다.
2. VQGlobalPrisma()
- 모듈에서 사용할 Prisma를 글로벌 변수로 사용하기 위한 파일을 생성하는 함수입니다.
`tsx`
export interface VqmAsset extends Asset {
data: VQM.IVisualQueryPhaseList;
}
`tsx`
export interface IVisualQueryPhaseList {
functionName: string; // 모듈 이름
parameterRecord: Record
returnRecord: Record
PhaseList: Array
}
`tsx`
export interface IVisualQueryPhase {
ModelName: string; // 사용하는 Model 이름
Action: string; // DB Action 종류
PhaseName: string; // Phase 이름
FilterList?: Array
CreateData?: IVBisualQueryData; // 데이터 생성
UpdateData?: IVBisualQueryData; // 데이터 업데이트
UniqueData?: IVisualQueryUniqueData; // 유니크 키로 데이터 찾기
Select?: Array
Include?: Array
Aggregate?: IVisualQueryAggregate; // 집계 함수
GroupBy?: Array
Having?: string; // 조건 연결
}
`tsx`
export interface IVisualQueryFilterGroup {
AND?: IVisualQueryFilterCondition[];
OR?: IVisualQueryFilterCondition[];
Filter_AND?: number[];
Filter_OR?: number[];
}
`tsx`
export interface IVisualQueryFilterCondition {
columns: string; // 컬럼 이름
operator: string; // 연산자
param: string | null; // 매개변수
types: string; // 데이터 타입
returnPhase?: string; // 반환 Phase
}
`tsx`
export interface IVBisualQueryData {
[key: string]: IVisualQueryCreateDynamicData | string;
}
`tsx`
export interface IVisualQueryCreateDynamicData {
keyName: string; // 변수명
keyType: string; // 변수 타입
isNull?: boolean; // null 허용 여부
data?: IVBisualQueryData | string;
}
`tsx`
export interface IVisualQueryUniqueData {
uniqueName: string; // 유니크 컬럼
valueData: string; // 매개변수 값
}
`tsx`
export interface IVisualQueryAggregate {
Sum?: Array
Count?: Array
Min?: Array
Max?: Array
Avg?: Array
}
`tsx``
export interface IVisualQueryAggregateDynamicData {
columns: string; // 컬럼 이름
operator?: string; // 연산자
param?: string; // 매개변수
}