npm install
npm run serve
npm run build
npm run test
npm run lint
npm install
npm run serve
npm run build
npm run test
npm run lint
Event명 Auto Correct - 클레스로 변환시 첫 시작글자는 대문자로 시작해야함
Pub/Sub, REST방식 선택 / 소스코드 수정
번역 시, 동사는 과거분사형(PP)으로 변환되도록 적용
Bounded Context별 마이크로서비스에 최적화된 소스 코드 자동생성 지원 기능
오른쪽 하단에 Contact Us하여 Email 같은 것 연결
[수정] 오른쪽 하단에 'Consult this'를 넣어 SaaS 사용자 요청과 동시에 Provider가 개입할 수 있는 채널
event 스티커의 attribute 수정 기능 및 attribute 순서 변경 기능이 있는지 궁금합니다
현재는 수정 및 순서 설정 방법이 없어서 지웠다가 다시 작성하고 있습니다.
이벤트에 아무런 이름이 없을시 .java 빈 파일이 생성됨
아무이름이 없을때는 파일 생성을 안하면 될듯
Outgoing Event Attribute 지정 시, Aggregate에 포함된 도메인 엔티티에서 지정
UML 창을 오픈 후 Entity내의 필요 Attribute 선택
Bounded Context 만큼 프로젝트가 생성되어야 함
이벤트(Event) 명에 대한 한>영 자동변환 (구글 번역 API)
이름으로 충분한 전달이 안될시 설명항목이 있으면,
서로 논의할때 이것이 어떤 기능인지를 알수있을듯 함
특히나 폴리시 같은 경우는 할일이 여러개 있을수도 있고, 설명하고자 하는 말이 많을것으로 보임
For API requests using Basic Authentication or OAuth, you can make up to 5000 requests per hour. Authenticated requests are associated with the authenticated user, regardless of whether Basic Authentication or an OAuth token was used. This means that all OAuth applications authorized by a user share the same quota of 5000 requests per hour when they authenticate with different tokens owned by the same user.
For unauthenticated requests, the rate limit allows for up to 60 requests per hour. Unauthenticated requests are associated with the originating IP address, and not the user making requests.
이벤트(Event) 명에 대한 한>영 자동변환 (구글 번역 API)
과거분사형(PP) 전환
Camel Case 적용
주문 생성 이렇게 치면 order create 라고 번역되는데.. 띄어쓰기가 그대로 코드에 들어감..
언더바 (_) 를 추가하던가, 카멜케이스로 변환하여 코드에 반영해야할듯
이렇게 되면 에러날게 확실함
이벤트 명 영문 번역 시, Java Class 명명 규칙인 Camel Case가 적용되도록 변환
-로고영역의 'uEngine' 텍스트를 'Eventstorming2Code' 로 변경
-Eventstorming2Code 를 형상화한 이미지 제작 후 대체
-by uengine.rog
현재 오른쪽 상단에 있는데.. 자꾸 움직여야 하는 필요가 있네요 - 버튼클릭이라던가..
오른쪽이나 왼쪽 아래로 내리는게 좋아보임
//mapping 파일들의 콘텐트를 교체한다.
List<FileMapping> mappings = categoryItem.getMappings();
//template 특유의 파일 목록이 있으면 파일 생성 목록에 추가해줌
if(appCreate.getTemplateSpecific()!=null && appCreate.getTemplateSpecific().getFileMappings()!=null)
mappings.addAll(appCreate.getTemplateSpecific().getFileMappings());
Map<String, String> templateFileCache = new HashMap<>();
MustacheTemplateEngine templateEngine = new MustacheTemplateEngine();
for (FileMapping mapping : mappings) {
Map<String, Object> templateData = data;
String path = mapping.getPath();
String file = mapping.getFile();
final String body = templateEngine.executeTemplateText(file, data);
//override if there are template data specified in each file mapping
if(mapping.getData()!=null){
templateData = new HashMap<String, Object>();
templateData.putAll(data);
templateData.put("templateSpecificData", mapping.getData());
if(templateFileCache.containsKey(file))
file = templateFileCache.get(file);
else {
String templateFile = gitlabExtentApi.getRepositoryFile(categoryItem.getProjectId(), "master", "template/file/" + file);
templateFileCache.put(file, templateFile);
file = templateFile;
}
}
final String body = templateEngine.executeTemplateText(file, templateData);
gitlabExtentApi.updateOrCraeteRepositoryFile(projectId, "master", path, body);
}
package hello;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="{{templateSpecificData.name}}table")
public class {{templateSpecificData.name}} {
{{#templateSpecificData.fieldDescriptors}}{{#attributes.isKey}}@Id @GeneratedValue(strategy=GenerationType.AUTO){{/attributes.isKey}}{{attributes.multiplicity}}
private {{className}} {{name}};
{{/templateSpecificData.fieldDescriptors}}
public {{templateSpecificData.name}}() {}
{{#templateSpecificData.fieldDescriptors}}
public {{className}} get{{attributes.nameForSetterGetter}}() {
return {{name}};
}
public void set{{attributes.nameForSetterGetter}}({{className}} {{name}}) {
this.{{name}} = {{name}};
}
{{/templateSpecificData.fieldDescriptors}}
}
- Repository.java
package hello;
import org.metaworks.multitenancy.persistence.MultitenantRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface {{templateSpecificData.name}}Repository extends MultitenantRepository<{{templateSpecificData.name}}, {{templateSpecificData.keyFieldDescriptor.className}}> {
}
이벤트에 관심 있는 타 마이크로서비스 코드 Generate 시,
참조되는 서비스의 이벤트 객체 클래스가 참조하는 프로젝트 내에도 동일하게 생성되어야 함.
이벤트 소스가 발행되는 위치는 어그리게잇의 라이프 사이클인 @Post/Pre Create, Update, Remove 이어야 함.
이벤트나 어그리게이트에서 id 나 name 같은 세부 항목을 적을때 'ENTITY ADD' 라는 버튼을 클릭하여 추가를 하는데,
그냥 컬럼명만 적고 엔터를 치면 자동으로 넘어가면 빠르게 작업이 될듯함.
왼쪽에 int, string 같은게 선택되어있으면 그거를 쓰고, 선택안하면 자동으로 string 으로 체크되어서..
우선순위는 낮음
EventStorming Meta Model 설계
구글번역기를 넣어서 한글 -> 영어 변환하기 쉽도록 하기
'Order'와 같은 SQL 예약어로 테이블이 생성되지 않도록 회피를 통한 우회 생성
이벤트스토밍 순서에 따른 툴 사용법 가이드
스티커 색상별 기능 및 Polyglot (e.g. Springboot) Code generation 매핑 관계 설명
Guided tour 제공방안 : 1) 메뉴얼 메뉴를 통해, 2) Welcome Page, 3) startup Tips를 통해
코드를 보는 화면에..
왼쪽에 트리구조와, 오른쪽에 코드를 보는것이 현재는 하나의 스크롤에 묶여서 움직이는데,
이것을 따로따로 움직이면, 코드를 볼때 현재 파일명을 확인 할 수 있어서 좋을듯함
Solution
Since all mobile and tablet events are triggered by touch, we will be using Touch API to solve the Drag and Drop problem.
note:
This demo solution is targeted only on mobile devices since browsers don’t have any touch interfaces. Toggle your browser device toolbar and change device to any mobile or tablet from your browser inspect.
I’ll be using only the basic features of Touch api, such as Touch.pageX and Touch.pageY to read x and y coordinates of my touch event.
Complete code available in codepen
Lets start by creating a draggable box in our HTML code.
/* listen to the touchmove event,
every time it fires, grab the location
of touch and assign it to box */
box.addEventListener('touchmove', function(e) {
// grab the location of touch
var touchLocation = e.targetTouches[0];
// assign box new coordinates based on the touch.
box.style.left = touchLocation.pageX + 'px';
box.style.top = touchLocation.pageY + 'px';
})
}
Finally dropping the element.
/* record the position of the touch
when released using touchend event.
This will be the drop position. */
box.addEventListener('touchend', function(e) {
// current box position.
var x = parseInt(box.style.left);
var y = parseInt(box.style.top);
})
정교한 Meta Model 설계를 통한 다양한 표준 노테이션 출력 기능
EventStorming Mode에서만 편집 Only
UML Diagram, Hexagonal Architecture, BPMN Notation convert 지원
온라인 상에서 여러 명이 동시에 툴 편집이 가능하도록 협업 지원
툴 상단에, 주요 공지사항 Push를 위한 Snackbar를 추가, 패치 및 교육/세미나 정보 제공
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.