@serverkit-lib/executable-boilerplate
v0.0.67
Published
Serverkit Compiler Module Package - Executable Boilerplate
Readme
Result-Use-Module
소개
이 모듈(executable-boilerplate)은 컴파일 프로젝트에서 유저가 생성한 서버를 만들기 위한 기능들을 제공합니다.
DBM 기능 소개
DBM의 경우 DB를 생성할 dbconfig 데이터와 테이블을 생성할 TableInfo의 정보가 필요합니다.
컴파일을 할 때 DB의 정보는 dbconfig에 맞게 데이터를 받아야 합니다.
DB를 생성할 때 필요한 정보입니다.
const netdata: CNet_DBSet = new CNet_DBSet(IConnectionBase, ClientDbm);
netdata.PrismaSetting();IConnectionBase는 사용하는 DB에 따라 SQLite와 PostgreSQL로 나뉩니다.
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 데이터베이스 이름
}1. 공통 부분 (Asset)
export interface Asset {
id: string;
name: string;
fileFormatVersion: string;
ideFormatVersion: string;
description: string;
}DBM 주요 인터페이스 설명
1. DbmAsset
export interface DbmAsset extends Asset {
data: ClientDbm;
}2. ClientDbm
export interface ClientDbm {
tableName: string; // 테이블의 이름
fields: SCM.IDBField; // Model을 구성하는 Field의 정보
}3. IDBField
export interface IDBField {
name: string; // 컬럼 이름
type: string; // 자료형
attribute: IAttribute; // 제약사항
next?: IDBField[]; // relation의 경우 추가되는 Model
configs?: IDbConfig; // config 정보
}4. IAttribute
export interface IAttribute {
canBeNull: boolean; // null 허용 여부
isArray: boolean; // List 여부
}5. IDbConfig
export interface IDbConfig {
defaultValue?: string; // 기본값
isUnique?: boolean; // 유니크 체크 여부
}VQM 기능 소개
executable-boilerplate의 VQM namespace는 .vqm 확장자가 지정한 Visual Query를 생성하고 동적 module을 하기 위한 기능입니다.
let querymanager: CVisualQueryManager = new CVisualQueryManager(IVisualQueryPhaseList[]);
// js 파일 생성
const buildList: Array<IBuildJSData> = querymanager.VQBuildJS();
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을 참고하세요.
VQM 주요 함수 설명
VQIndexJS()- 위에서 생성된 모듈을 정리하여 포함하는
index.js파일을 생성하는 함수입니다.
- 위에서 생성된 모듈을 정리하여 포함하는
VQGlobalPrisma()- 모듈에서 사용할 Prisma를 글로벌 변수로 사용하기 위한 파일을 생성하는 함수입니다.
VQM 주요 인터페이스 설명
1. VqmAsset
export interface VqmAsset extends Asset {
data: VQM.IVisualQueryPhaseList;
}2. IVisualQueryPhaseList
export interface IVisualQueryPhaseList {
functionName: string; // 모듈 이름
parameterRecord: Record<string, string>; // 모듈 파라미터
returnRecord: Record<string, string>; // 모듈 반환값
PhaseList: Array<IVisualQueryPhase>; // Phase 리스트
}3. IVisualQueryPhase
export interface IVisualQueryPhase {
ModelName: string; // 사용하는 Model 이름
Action: string; // DB Action 종류
PhaseName: string; // Phase 이름
FilterList?: Array<IVisualQueryFilterGroup>; // 조건문
CreateData?: IVBisualQueryData; // 데이터 생성
UpdateData?: IVBisualQueryData; // 데이터 업데이트
UniqueData?: IVisualQueryUniqueData; // 유니크 키로 데이터 찾기
Select?: Array<string>; // 조회 컬럼
Include?: Array<string>; // 관계 연결
Aggregate?: IVisualQueryAggregate; // 집계 함수
GroupBy?: Array<string>; // 그룹화
Having?: string; // 조건 연결
}4. IVisualQueryFilterGroup
export interface IVisualQueryFilterGroup {
AND?: IVisualQueryFilterCondition[];
OR?: IVisualQueryFilterCondition[];
Filter_AND?: number[];
Filter_OR?: number[];
}5. IVisualQueryFilterCondition
export interface IVisualQueryFilterCondition {
columns: string; // 컬럼 이름
operator: string; // 연산자
param: string | null; // 매개변수
types: string; // 데이터 타입
returnPhase?: string; // 반환 Phase
}6. IVBisualQueryData
export interface IVBisualQueryData {
[key: string]: IVisualQueryCreateDynamicData | string;
}7. IVisualQueryCreateDynamicData
export interface IVisualQueryCreateDynamicData {
keyName: string; // 변수명
keyType: string; // 변수 타입
isNull?: boolean; // null 허용 여부
data?: IVBisualQueryData | string;
}8. IVisualQueryUniqueData
export interface IVisualQueryUniqueData {
uniqueName: string; // 유니크 컬럼
valueData: string; // 매개변수 값
}9. IVisualQueryAggregate
export interface IVisualQueryAggregate {
Sum?: Array<IVisualQueryAggregateDynamicData>;
Count?: Array<IVisualQueryAggregateDynamicData>;
Min?: Array<IVisualQueryAggregateDynamicData>;
Max?: Array<IVisualQueryAggregateDynamicData>;
Avg?: Array<IVisualQueryAggregateDynamicData>;
}10. IVisualQueryAggregateDynamicData
export interface IVisualQueryAggregateDynamicData {
columns: string; // 컬럼 이름
operator?: string; // 연산자
param?: string; // 매개변수
}