@eventcatalog/create-eventcatalog 1.2.1 → 2.0.0
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.
- package/README.md +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22962 -1
- package/package.json +26 -50
- package/templates/default/Dockerfile +11 -0
- package/templates/default/README-template.md +1 -0
- package/templates/default/commands/AddInventory/index.md +42 -0
- package/templates/default/commands/AddInventory/schema.json +29 -0
- package/templates/default/commands/UpdateInventory/index.md +42 -0
- package/templates/default/commands/UpdateInventory/schema.json +29 -0
- package/templates/default/domains/Orders/index.md +49 -0
- package/templates/default/domains/Orders/versioned/0.0.1/index.md +20 -0
- package/templates/default/domains/Payment/index.md +24 -0
- package/templates/default/eventcatalog.config.js +18 -0
- package/templates/default/eventcatalog.styles.css +1 -0
- package/templates/default/events/Inventory/InventoryAdjusted/index.md +103 -0
- package/templates/default/events/Inventory/InventoryAdjusted/schema.avro +13 -0
- package/templates/default/events/Inventory/InventoryAdjusted/versioned/0.0.1/index.md +19 -0
- package/templates/default/events/Inventory/InventoryAdjusted/versioned/0.0.1/schema.avro +9 -0
- package/templates/default/events/Inventory/InventoryAdjusted/versioned/0.0.3/index.md +104 -0
- package/templates/default/events/Inventory/InventoryAdjusted/versioned/0.0.3/schema.avro +14 -0
- package/templates/default/events/Inventory/OutOfStock/index.md +96 -0
- package/templates/default/events/Order/OrderAmended/index.md +53 -0
- package/templates/default/events/Order/OrderAmended/schema.avro +75 -0
- package/templates/default/events/Order/OrderAmended/schema.json +71 -0
- package/templates/default/events/Order/OrderCancelled/index.md +51 -0
- package/templates/default/events/Order/OrderCancelled/schema.json +72 -0
- package/templates/default/events/Order/OrderConfirmed/index.md +51 -0
- package/templates/default/events/Order/OrderConfirmed/schema.json +67 -0
- package/templates/default/events/Payment/PaymentInitiated/index.md +32 -0
- package/templates/default/events/Payment/PaymentProcessed/index.md +38 -0
- package/{dist → templates}/default/gitignore +2 -2
- package/templates/default/services/InventoryService/index.md +36 -0
- package/templates/default/services/NotificationService/index.md +36 -0
- package/templates/default/services/OrdersService/index.md +29 -0
- package/templates/default/services/OrdersService/openapi.yml +170 -0
- package/templates/default/services/PaymentService/index.md +31 -0
- package/templates/default/teams/full-stack.md +26 -0
- package/templates/default/teams/mobile-devs.md +20 -0
- package/templates/default/users/aSmith.md +27 -0
- package/templates/default/users/dboyne.md +32 -0
- package/templates/default/users/mSmith.md +8 -0
- package/templates/index.ts +137 -0
- package/templates/types.ts +21 -0
- package/dist/default/Dockerfile +0 -20
- package/dist/default/README-template.md +0 -1
- package/dist/default/dockerignore +0 -7
- package/dist/default/domains/Shopping/events/AddedItemToCart/examples/example.js +0 -17
- package/dist/default/domains/Shopping/events/AddedItemToCart/index.md +0 -29
- package/dist/default/domains/Shopping/events/AddedItemToCart/schema.json +0 -46
- package/dist/default/domains/Shopping/events/AddedItemToCart/versioned/0.0.1/index.md +0 -28
- package/dist/default/domains/Shopping/events/AddedItemToCart/versioned/0.0.1/schema.json +0 -39
- package/dist/default/domains/Shopping/events/AddedItemToCart/versioned/0.0.2/index.md +0 -28
- package/dist/default/domains/Shopping/events/AddedItemToCart/versioned/0.0.2/schema.json +0 -46
- package/dist/default/domains/Shopping/events/RemovedItemFromCart/index.md +0 -26
- package/dist/default/domains/Shopping/events/RemovedItemFromCart/schema.json +0 -46
- package/dist/default/domains/Shopping/index.md +0 -16
- package/dist/default/eventcatalog.config.js +0 -50
- package/dist/default/eventcatalog.styles.css +0 -15
- package/dist/default/events/OrderComplete/index.md +0 -23
- package/dist/default/events/OrderComplete/schema.json +0 -39
- package/dist/default/events/OrderConfirmed/index.md +0 -23
- package/dist/default/events/OrderConfirmed/schema.json +0 -39
- package/dist/default/events/OrderRequested/index.md +0 -25
- package/dist/default/events/OrderRequested/schema.json +0 -39
- package/dist/default/events/PaymentProcessed/index.md +0 -25
- package/dist/default/events/PaymentProcessed/schema.json +0 -43
- package/dist/default/events/ShipmentDelivered/index.md +0 -24
- package/dist/default/events/ShipmentDelivered/schema.json +0 -43
- package/dist/default/events/ShipmentDispatched/index.md +0 -23
- package/dist/default/events/ShipmentDispatched/schema.json +0 -43
- package/dist/default/events/ShipmentPrepared/index.md +0 -23
- package/dist/default/events/ShipmentPrepared/schema.json +0 -43
- package/dist/default/public/favicon.ico +0 -0
- package/dist/default/public/logo.svg +0 -44
- package/dist/default/public/opengraph.png +0 -0
- package/dist/default/services/Basket Service/index.md +0 -16
- package/dist/default/services/Data Lake/index.md +0 -11
- package/dist/default/services/Payment Service/index.md +0 -15
- package/dist/default/services/Payment Service/openapi.yaml +0 -94
- package/dist/default/services/Shipping Service/index.md +0 -16
- package/dist/gitignore +0 -24
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: NotificationService
|
|
3
|
+
version: 0.0.2
|
|
4
|
+
name: Notifications
|
|
5
|
+
summary: |
|
|
6
|
+
Service that handles orders
|
|
7
|
+
owners:
|
|
8
|
+
- dboyne
|
|
9
|
+
receives:
|
|
10
|
+
- id: InventoryAdjusted
|
|
11
|
+
version: 0.0.1
|
|
12
|
+
repository:
|
|
13
|
+
language: JavaScript
|
|
14
|
+
url: https://github.com/boyney123/pretend-shipping-service
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
The Notification Service is responsible for managing and delivering notifications to users and other services. It supports various notification channels such as email, SMS, push notifications, and in-app notifications. The service ensures reliable and timely delivery of messages and integrates with other services to trigger notifications based on specific events.
|
|
20
|
+
|
|
21
|
+
## Architecture diagram
|
|
22
|
+
|
|
23
|
+
<NodeGraph />
|
|
24
|
+
|
|
25
|
+
## Core Concepts
|
|
26
|
+
|
|
27
|
+
<AccordionGroup>
|
|
28
|
+
<Accordion title="Notification">
|
|
29
|
+
- Description: A message that is sent to a user or a service.
|
|
30
|
+
- Attributes: notificationId, type, recipient, content, channel, status, timestamp
|
|
31
|
+
</Accordion>
|
|
32
|
+
<Accordion title="Channel">
|
|
33
|
+
- Description: The medium through which the notification is delivered (e.g., email, SMS, push notification).
|
|
34
|
+
- Attributes: channelId, name, provider, configuration
|
|
35
|
+
</Accordion>
|
|
36
|
+
</AccordionGroup>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OrdersService
|
|
3
|
+
version: 0.0.2
|
|
4
|
+
name: Orders Service
|
|
5
|
+
summary: |
|
|
6
|
+
Service that handles orders
|
|
7
|
+
owners:
|
|
8
|
+
- dboyne
|
|
9
|
+
receives:
|
|
10
|
+
- id: InventoryAdjusted
|
|
11
|
+
version: 0.0.3
|
|
12
|
+
sends:
|
|
13
|
+
- id: AddInventory
|
|
14
|
+
version: 0.0.3
|
|
15
|
+
repository:
|
|
16
|
+
language: JavaScript
|
|
17
|
+
url: https://github.com/boyney123/pretend-shipping-service
|
|
18
|
+
schemaPath: "openapi.yml"
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
The Orders Service is responsible for managing customer orders within the system. It handles order creation, updating, status tracking, and interactions with other services such as Inventory, Payment, and Notification services to ensure smooth order processing and fulfillment.
|
|
24
|
+
|
|
25
|
+
<OpenAPI />
|
|
26
|
+
|
|
27
|
+
## Architecture diagram
|
|
28
|
+
|
|
29
|
+
<NodeGraph />
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
openapi: "3.0.0"
|
|
2
|
+
info:
|
|
3
|
+
title: Simple API overview
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
paths:
|
|
6
|
+
/:
|
|
7
|
+
get:
|
|
8
|
+
operationId: listVersionsv2
|
|
9
|
+
summary: List API versions
|
|
10
|
+
responses:
|
|
11
|
+
'200':
|
|
12
|
+
description: |-
|
|
13
|
+
200 response
|
|
14
|
+
content:
|
|
15
|
+
application/json:
|
|
16
|
+
examples:
|
|
17
|
+
foo:
|
|
18
|
+
value:
|
|
19
|
+
{
|
|
20
|
+
"versions": [
|
|
21
|
+
{
|
|
22
|
+
"status": "CURRENT",
|
|
23
|
+
"updated": "2011-01-21T11:33:21Z",
|
|
24
|
+
"id": "v2.0",
|
|
25
|
+
"links": [
|
|
26
|
+
{
|
|
27
|
+
"href": "http://127.0.0.1:8774/v2/",
|
|
28
|
+
"rel": "self"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"status": "EXPERIMENTAL",
|
|
34
|
+
"updated": "2013-07-23T11:33:21Z",
|
|
35
|
+
"id": "v3.0",
|
|
36
|
+
"links": [
|
|
37
|
+
{
|
|
38
|
+
"href": "http://127.0.0.1:8774/v3/",
|
|
39
|
+
"rel": "self"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
'300':
|
|
46
|
+
description: |-
|
|
47
|
+
300 response
|
|
48
|
+
content:
|
|
49
|
+
application/json:
|
|
50
|
+
examples:
|
|
51
|
+
foo:
|
|
52
|
+
value: |
|
|
53
|
+
{
|
|
54
|
+
"versions": [
|
|
55
|
+
{
|
|
56
|
+
"status": "CURRENT",
|
|
57
|
+
"updated": "2011-01-21T11:33:21Z",
|
|
58
|
+
"id": "v2.0",
|
|
59
|
+
"links": [
|
|
60
|
+
{
|
|
61
|
+
"href": "http://127.0.0.1:8774/v2/",
|
|
62
|
+
"rel": "self"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"status": "EXPERIMENTAL",
|
|
68
|
+
"updated": "2013-07-23T11:33:21Z",
|
|
69
|
+
"id": "v3.0",
|
|
70
|
+
"links": [
|
|
71
|
+
{
|
|
72
|
+
"href": "http://127.0.0.1:8774/v3/",
|
|
73
|
+
"rel": "self"
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
/v2:
|
|
80
|
+
get:
|
|
81
|
+
operationId: getVersionDetailsv2
|
|
82
|
+
summary: Show API version details
|
|
83
|
+
responses:
|
|
84
|
+
'200':
|
|
85
|
+
description: |-
|
|
86
|
+
200 response
|
|
87
|
+
content:
|
|
88
|
+
application/json:
|
|
89
|
+
examples:
|
|
90
|
+
foo:
|
|
91
|
+
value:
|
|
92
|
+
{
|
|
93
|
+
"version": {
|
|
94
|
+
"status": "CURRENT",
|
|
95
|
+
"updated": "2011-01-21T11:33:21Z",
|
|
96
|
+
"media-types": [
|
|
97
|
+
{
|
|
98
|
+
"base": "application/xml",
|
|
99
|
+
"type": "application/vnd.openstack.compute+xml;version=2"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"base": "application/json",
|
|
103
|
+
"type": "application/vnd.openstack.compute+json;version=2"
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"id": "v2.0",
|
|
107
|
+
"links": [
|
|
108
|
+
{
|
|
109
|
+
"href": "http://127.0.0.1:8774/v2/",
|
|
110
|
+
"rel": "self"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"href": "http://docs.openstack.org/api/openstack-compute/2/os-compute-devguide-2.pdf",
|
|
114
|
+
"type": "application/pdf",
|
|
115
|
+
"rel": "describedby"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
|
|
119
|
+
"type": "application/vnd.sun.wadl+xml",
|
|
120
|
+
"rel": "describedby"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
|
|
124
|
+
"type": "application/vnd.sun.wadl+xml",
|
|
125
|
+
"rel": "describedby"
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
'203':
|
|
131
|
+
description: |-
|
|
132
|
+
203 response
|
|
133
|
+
content:
|
|
134
|
+
application/json:
|
|
135
|
+
examples:
|
|
136
|
+
foo:
|
|
137
|
+
value:
|
|
138
|
+
{
|
|
139
|
+
"version": {
|
|
140
|
+
"status": "CURRENT",
|
|
141
|
+
"updated": "2011-01-21T11:33:21Z",
|
|
142
|
+
"media-types": [
|
|
143
|
+
{
|
|
144
|
+
"base": "application/xml",
|
|
145
|
+
"type": "application/vnd.openstack.compute+xml;version=2"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"base": "application/json",
|
|
149
|
+
"type": "application/vnd.openstack.compute+json;version=2"
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"id": "v2.0",
|
|
153
|
+
"links": [
|
|
154
|
+
{
|
|
155
|
+
"href": "http://23.253.228.211:8774/v2/",
|
|
156
|
+
"rel": "self"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"href": "http://docs.openstack.org/api/openstack-compute/2/os-compute-devguide-2.pdf",
|
|
160
|
+
"type": "application/pdf",
|
|
161
|
+
"rel": "describedby"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
|
|
165
|
+
"type": "application/vnd.sun.wadl+xml",
|
|
166
|
+
"rel": "describedby"
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PaymentService
|
|
3
|
+
name: Payment Service
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
summary: |
|
|
6
|
+
Service that handles payments
|
|
7
|
+
owners:
|
|
8
|
+
- dboyne
|
|
9
|
+
receives:
|
|
10
|
+
- id: PaymentInitiated
|
|
11
|
+
version: 0.0.1
|
|
12
|
+
sends:
|
|
13
|
+
- id: PaymentProcessed
|
|
14
|
+
version: 0.0.1
|
|
15
|
+
repository:
|
|
16
|
+
language: JavaScript
|
|
17
|
+
url: https://github.com/boyney123/pretend-shipping-service
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
The Payment Service is a crucial component of our system that handles all payment-related operations. It processes payments, manages transactions, and communicates with other services through events. Using an event-driven architecture, it ensures that all actions are asynchronous, decoupled, and scalable.
|
|
21
|
+
|
|
22
|
+
<NodeGraph />
|
|
23
|
+
|
|
24
|
+
### Key Components
|
|
25
|
+
- Payment API: Exposes endpoints for initiating payments and querying payment status.
|
|
26
|
+
- Payment Processor: Handles the core payment processing logic.
|
|
27
|
+
- Event Bus: Manages the communication between services using events.
|
|
28
|
+
- Payment Gateway: Interfaces with external payment providers.
|
|
29
|
+
- Transaction Service: Manages transaction records and states.
|
|
30
|
+
- Notification Service: Sends notifications related to payment status changes.
|
|
31
|
+
- Database: Stores transaction data and payment status.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: full-stack
|
|
3
|
+
name: Full stackers
|
|
4
|
+
summmary: Full stack developers based in London, UK
|
|
5
|
+
members:
|
|
6
|
+
- dboyne
|
|
7
|
+
- asmith
|
|
8
|
+
- msmith
|
|
9
|
+
email: test@test.com
|
|
10
|
+
slackDirectMessageUrl: https://yourteam.slack.com/channels/boyney123
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
The Full Stack Team is responsible for developing and maintaining both the front-end and back-end components of our applications. This team ensures that the user interfaces are intuitive and responsive, and that the server-side logic and database interactions are efficient and secure. The Full Stack Team handles the entire lifecycle of web applications, from initial development to deployment and ongoing maintenance.
|
|
16
|
+
|
|
17
|
+
## Responsibilities
|
|
18
|
+
|
|
19
|
+
### Key Responsibilities
|
|
20
|
+
- **Front-End Development**: Design and implement user interfaces using modern web technologies (e.g., HTML, CSS, JavaScript, React).
|
|
21
|
+
- **Back-End Development**: Develop and maintain server-side logic, APIs, and database interactions (e.g., Node.js, Express, SQL/NoSQL databases).
|
|
22
|
+
- **Integration**: Ensure seamless communication between the front-end and back-end components.
|
|
23
|
+
- **Performance Optimization**: Optimize the performance and scalability of web applications.
|
|
24
|
+
- **Testing and Debugging**: Write and maintain unit, integration, and end-to-end tests to ensure the quality and reliability of the applications.
|
|
25
|
+
- **Deployment**: Manage the deployment of applications to production environments using CI/CD pipelines.
|
|
26
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mobile-devs
|
|
3
|
+
name: The mobile devs
|
|
4
|
+
members:
|
|
5
|
+
- dboyne
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
The Mobile Devs team is responsible for the development and maintenance of the mobile applications for our company. This includes the iOS and Android apps that customers use to interact with our services, make purchases, and manage their accounts. The team ensures that the mobile apps are user-friendly, secure, and performant.
|
|
9
|
+
|
|
10
|
+
## Responsibilities
|
|
11
|
+
|
|
12
|
+
### 1. Mobile Application Development
|
|
13
|
+
- **Platform Support**: Developing and maintaining apps for iOS and Android platforms.
|
|
14
|
+
- **Feature Implementation**: Implementing new features based on product requirements and user feedback.
|
|
15
|
+
- **User Interface Design**: Ensuring a consistent and intuitive user interface across all mobile platforms.
|
|
16
|
+
- **Performance Optimization**: Optimizing the performance of mobile apps to ensure fast and smooth user experiences.
|
|
17
|
+
|
|
18
|
+
### 2. Integration with Backend Services
|
|
19
|
+
- **API Integration**: Integrating mobile apps with backend services using RESTful APIs and other communication protocols.
|
|
20
|
+
- **Real-time Updates**: Implementing real-time data updates and synchronization with backend services.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: asmith
|
|
3
|
+
name: Amy Smith
|
|
4
|
+
avatarUrl: https://randomuser.me/api/portraits/women/48.jpg
|
|
5
|
+
role: Product owner
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Hello! I'm Amy Smith, the Product Owner of the innovative Full Stackers team. With a strong focus on delivering exceptional value, I specialize in connecting business objectives with technical solutions to create products that users love.
|
|
9
|
+
|
|
10
|
+
### About Me
|
|
11
|
+
|
|
12
|
+
With a comprehensive background in product management and a solid understanding of software development, I bring a unique perspective to the table. My career has been driven by a passion for understanding user needs, defining clear product visions, and leading teams to successful product deliveries.
|
|
13
|
+
|
|
14
|
+
### What I Do
|
|
15
|
+
|
|
16
|
+
As the Product Owner for Full Stackers, my role involves a wide range of responsibilities aimed at ensuring our products are both high-quality and user-centric. Key aspects of my role include:
|
|
17
|
+
|
|
18
|
+
- **Product Vision & Strategy**: Defining and communicating the long-term vision and strategy for our products, ensuring alignment with the company's objectives and market demands.
|
|
19
|
+
- **Roadmap Planning**: Developing and maintaining a product roadmap that highlights key features and milestones, prioritizing tasks based on their business value and user feedback.
|
|
20
|
+
- **Stakeholder Management**: Engaging with stakeholders across the organization to gather requirements, provide updates, and ensure everyone is aligned on the product's direction.
|
|
21
|
+
- **User-Centric Design**: Championing the end-users by conducting user research, analyzing feedback, and ensuring our products effectively solve their problems.
|
|
22
|
+
- **Agile Leadership**: Leading the development process using Agile methodologies, facilitating sprint planning, and ensuring the team has clear priorities and objectives.
|
|
23
|
+
|
|
24
|
+
My mission is to deliver products that not only meet but exceed customer expectations. I thrive on the challenge of translating complex requirements into simple, intuitive solutions.
|
|
25
|
+
|
|
26
|
+
If you’re interested in product management, user experience, or discussing the latest trends in technology, feel free to reach out!
|
|
27
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dboyne
|
|
3
|
+
name: David Boyne
|
|
4
|
+
avatarUrl: "https://pbs.twimg.com/profile_images/1262283153563140096/DYRDqKg6_400x400.png"
|
|
5
|
+
role: Lead developer
|
|
6
|
+
email: test@test.com
|
|
7
|
+
slackDirectMessageUrl: https://yourteam.slack.com/channels/boyney123
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Hello! I'm David Boyne, the Tech Lead of an amazing team called Full Stackers. With a passion for building robust and scalable systems, I specialize in designing and implementing event-driven architectures that power modern, responsive applications.
|
|
11
|
+
|
|
12
|
+
### About Me
|
|
13
|
+
|
|
14
|
+
With over a decade of experience in the tech industry, I have honed my skills in full-stack development, cloud computing, and distributed systems. My journey has taken me through various roles, from software engineer to architect, and now as a tech lead, I am committed to driving innovation and excellence within my team.
|
|
15
|
+
|
|
16
|
+
### What I Do
|
|
17
|
+
|
|
18
|
+
At Full Stackers, we focus on creating seamless and efficient event-driven architectures that enhance the performance and scalability of our applications. My role involves:
|
|
19
|
+
|
|
20
|
+
- **Architecture Design**: Crafting scalable and resilient system architectures using event-driven paradigms.
|
|
21
|
+
- **Team Leadership**: Guiding a talented team of developers, fostering a collaborative and innovative environment.
|
|
22
|
+
- **Code Reviews & Mentorship**: Ensuring code quality and sharing knowledge to help the team grow.
|
|
23
|
+
- **Stakeholder Collaboration**: Working closely with other teams and stakeholders to align our technical solutions with business goals.
|
|
24
|
+
- **Continuous Improvement**: Advocating for best practices in software development, deployment, and monitoring.
|
|
25
|
+
|
|
26
|
+
I am passionate about leveraging the power of events to build systems that are not only highly responsive but also easier to maintain and extend. In an ever-evolving tech landscape, I strive to stay ahead of the curve, continuously learning and adapting to new technologies and methodologies.
|
|
27
|
+
|
|
28
|
+
Feel free to connect with me to discuss all things tech, event-driven architectures, or to exchange ideas on building better software systems!
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
*David Boyne*
|
|
32
|
+
*Tech Lead, Full Stackers*
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: msmith
|
|
3
|
+
name: Martin Smith
|
|
4
|
+
avatarUrl: "https://randomuser.me/api/portraits/men/51.jpg"
|
|
5
|
+
role: Senior software engineer
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
As a Senior Mobile Developer on The Mobile Devs team, I play a key role in designing, developing, and maintaining our company’s mobile applications. My focus is on creating a seamless and intuitive user experience for our customers on both iOS and Android platforms. I work closely with cross-functional teams, including backend developers, UX/UI designers, and product managers, to deliver high-quality mobile solutions that meet business objectives and exceed user expectations.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { copy } from "../helpers/copy";
|
|
2
|
+
import { install } from "../helpers/install";
|
|
3
|
+
|
|
4
|
+
import os from "os";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
|
|
9
|
+
import { GetTemplateFileArgs, InstallTemplateArgs } from "./types";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the file path for a given file in a template, e.g. "next.config.js".
|
|
13
|
+
*/
|
|
14
|
+
export const getTemplateFile = ({
|
|
15
|
+
template,
|
|
16
|
+
mode,
|
|
17
|
+
file,
|
|
18
|
+
}: GetTemplateFileArgs): string => {
|
|
19
|
+
return path.join(__dirname, template, mode, file);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Install a Next.js internal template to a given `root` directory.
|
|
24
|
+
*/
|
|
25
|
+
export const installTemplate = async ({
|
|
26
|
+
appName,
|
|
27
|
+
root,
|
|
28
|
+
packageManager,
|
|
29
|
+
isOnline,
|
|
30
|
+
template,
|
|
31
|
+
mode,
|
|
32
|
+
eslint,
|
|
33
|
+
}: InstallTemplateArgs) => {
|
|
34
|
+
console.log(chalk.bold(`Using ${packageManager}.`));
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create a package.json for the new project
|
|
38
|
+
*/
|
|
39
|
+
const packageJson = {
|
|
40
|
+
name: appName,
|
|
41
|
+
version: "0.1.0",
|
|
42
|
+
private: true,
|
|
43
|
+
scripts: {
|
|
44
|
+
start: "eventcatalog start",
|
|
45
|
+
dev: "eventcatalog dev",
|
|
46
|
+
build: "eventcatalog build",
|
|
47
|
+
generate: "eventcatalog generate",
|
|
48
|
+
test: 'echo "Error: no test specified" && exit 1',
|
|
49
|
+
},
|
|
50
|
+
dependencies: {
|
|
51
|
+
"@eventcatalogtest/core-test": "latest"
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Write it to disk.
|
|
56
|
+
*/
|
|
57
|
+
fs.writeFileSync(
|
|
58
|
+
path.join(root, "package.json"),
|
|
59
|
+
JSON.stringify(packageJson, null, 2) + os.EOL,
|
|
60
|
+
);
|
|
61
|
+
/**
|
|
62
|
+
* These flags will be passed to `install()`, which calls the package manager
|
|
63
|
+
* install process.
|
|
64
|
+
*/
|
|
65
|
+
const installFlags = { packageManager, isOnline };
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Default dependencies.
|
|
69
|
+
*/
|
|
70
|
+
// const dependencies = ["@eventcatalog/eventcatalog-2"];
|
|
71
|
+
const dependencies = [] as any;
|
|
72
|
+
// "@myuser/my-package": "file:../lib"
|
|
73
|
+
const devDependencies = [
|
|
74
|
+
"@parcel/watcher",
|
|
75
|
+
"concurrently",
|
|
76
|
+
] as any;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Install package.json dependencies if they exist.
|
|
80
|
+
*/
|
|
81
|
+
if (dependencies.length) {
|
|
82
|
+
console.log();
|
|
83
|
+
console.log("Installing dependencies:");
|
|
84
|
+
for (const dependency of dependencies) {
|
|
85
|
+
console.log(`- ${chalk.cyan(dependency)}`);
|
|
86
|
+
}
|
|
87
|
+
console.log();
|
|
88
|
+
|
|
89
|
+
await install(root, dependencies, installFlags);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (devDependencies.length) {
|
|
93
|
+
console.log();
|
|
94
|
+
console.log("Installing devDependencies:");
|
|
95
|
+
for (const devDependency of devDependencies) {
|
|
96
|
+
// console.log(`- ${chalk.cyan(devDependency)}`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const devInstallFlags = { devDependencies: true, ...installFlags };
|
|
100
|
+
await install(root, devDependencies, devInstallFlags);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Copy the template files to the target directory.
|
|
104
|
+
*/
|
|
105
|
+
console.log("\nInitializing project with template:", template, "\n");
|
|
106
|
+
const templatePath = path.join(__dirname, "../templates", template);
|
|
107
|
+
// console.log("templatePath", templatePath, __dirname, template);
|
|
108
|
+
await copy("**", root, {
|
|
109
|
+
parents: true,
|
|
110
|
+
cwd: templatePath,
|
|
111
|
+
rename: (name) => {
|
|
112
|
+
switch (name) {
|
|
113
|
+
case "env":
|
|
114
|
+
case "gitignore":
|
|
115
|
+
case "dockerignore":
|
|
116
|
+
case "eslintrc.json": {
|
|
117
|
+
return ".".concat(name);
|
|
118
|
+
}
|
|
119
|
+
// README.md is ignored by webpack-asset-relocator-loader used by ncc:
|
|
120
|
+
// https://github.com/vercel/webpack-asset-relocator-loader/blob/e9308683d47ff507253e37c9bcbb99474603192b/src/asset-relocator.js#L227
|
|
121
|
+
case "README-template.md": {
|
|
122
|
+
return "README.md";
|
|
123
|
+
}
|
|
124
|
+
default: {
|
|
125
|
+
return name;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
if (!eslint) {
|
|
132
|
+
// remove un-necessary template file if eslint is not desired
|
|
133
|
+
await fs.promises.unlink(path.join(root, ".eslintrc.json"));
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export * from "./types";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PackageManager } from "../helpers/get-pkg-manager";
|
|
2
|
+
|
|
3
|
+
export type TemplateType = "default" | "app";
|
|
4
|
+
export type TemplateMode = "js" | "ts";
|
|
5
|
+
|
|
6
|
+
export interface GetTemplateFileArgs {
|
|
7
|
+
template: TemplateType;
|
|
8
|
+
mode: TemplateMode;
|
|
9
|
+
file: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface InstallTemplateArgs {
|
|
13
|
+
appName: string;
|
|
14
|
+
root: string;
|
|
15
|
+
packageManager: PackageManager;
|
|
16
|
+
isOnline: boolean;
|
|
17
|
+
|
|
18
|
+
template: TemplateType;
|
|
19
|
+
mode: TemplateMode;
|
|
20
|
+
eslint: boolean;
|
|
21
|
+
}
|
package/dist/default/Dockerfile
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Build Stage
|
|
2
|
-
FROM node:16-alpine AS BUILD_IMAGE
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
COPY package*.json ./
|
|
5
|
-
RUN npm ci
|
|
6
|
-
COPY . .
|
|
7
|
-
RUN npm run build
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Production Stage
|
|
11
|
-
FROM node:16-alpine AS PRODUCTION_STAGE
|
|
12
|
-
WORKDIR /app
|
|
13
|
-
COPY --from=BUILD_IMAGE /app/package*.json ./
|
|
14
|
-
COPY --from=BUILD_IMAGE /app/.next ./.next
|
|
15
|
-
COPY --from=BUILD_IMAGE /app/.eventcatalog-core ./.eventcatalog-core
|
|
16
|
-
COPY --from=BUILD_IMAGE /app/public ./public
|
|
17
|
-
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
|
|
18
|
-
ENV NODE_ENV=production
|
|
19
|
-
EXPOSE 3000
|
|
20
|
-
CMD ["npm", "start"]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# My Event Catalog
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
var kafka = require('kafka-node'),
|
|
2
|
-
Consumer = kafka.Consumer,
|
|
3
|
-
client = new kafka.KafkaClient(),
|
|
4
|
-
consumer = new Consumer(
|
|
5
|
-
client,
|
|
6
|
-
[
|
|
7
|
-
{ topic: 't', partition: 0 },
|
|
8
|
-
{ topic: 'AddedItemToCart', partition: 1 },
|
|
9
|
-
],
|
|
10
|
-
{
|
|
11
|
-
autoCommit: false,
|
|
12
|
-
}
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
consumer.on('message', function (message) {
|
|
16
|
-
console.log(message);
|
|
17
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: AddedItemToCart
|
|
3
|
-
version: 0.0.2
|
|
4
|
-
summary: |
|
|
5
|
-
Holds information about what the user added to their shopping cart.
|
|
6
|
-
producers:
|
|
7
|
-
- Basket Service
|
|
8
|
-
consumers:
|
|
9
|
-
- Data Lake
|
|
10
|
-
owners:
|
|
11
|
-
- dboyne
|
|
12
|
-
- mSmith
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
<Admonition>When firing this event make sure you set the `correlation-id` in the headers. Our schemas have standard metadata make sure you read and follow it.</Admonition>
|
|
16
|
-
|
|
17
|
-
### Details
|
|
18
|
-
|
|
19
|
-
This event can be triggered multiple times per customer. Everytime the customer adds an item to their shopping cart this event will be triggered.
|
|
20
|
-
|
|
21
|
-
We have a frontend application that allows users to buy things from our store. This front end interacts directly with the `Basket Service` to add items to the cart. The `Basket Service` will raise the events.
|
|
22
|
-
|
|
23
|
-
<NodeGraph title="Consumer / Producer Diagram" />
|
|
24
|
-
|
|
25
|
-
<EventExamples title="How to trigger event" />
|
|
26
|
-
|
|
27
|
-
<Schema />
|
|
28
|
-
|
|
29
|
-
<SchemaViewer renderRootTreeLines defaultExpandedDepth='0' maxHeight="500" />
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$id": "https://example.com/AddedItemToCart.json",
|
|
3
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
-
"title": "AddedItemToCart",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"properties": {
|
|
7
|
-
"metadata": {
|
|
8
|
-
"type": "object",
|
|
9
|
-
"properties": {
|
|
10
|
-
"correlationId": {
|
|
11
|
-
"type": "string",
|
|
12
|
-
"description": "The ID of the user"
|
|
13
|
-
},
|
|
14
|
-
"domain": {
|
|
15
|
-
"type": "string",
|
|
16
|
-
"description": "The domain of the event"
|
|
17
|
-
},
|
|
18
|
-
"service": {
|
|
19
|
-
"type": "string",
|
|
20
|
-
"description": "The name of the service that triggered the event"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"required": ["correlationId", "domain"]
|
|
24
|
-
},
|
|
25
|
-
"data": {
|
|
26
|
-
"type": "object",
|
|
27
|
-
"properties": {
|
|
28
|
-
"userId": {
|
|
29
|
-
"type": "string",
|
|
30
|
-
"description": "The ID of the user"
|
|
31
|
-
},
|
|
32
|
-
"itemId": {
|
|
33
|
-
"type": "string",
|
|
34
|
-
"description": "The ID of the shopping item"
|
|
35
|
-
},
|
|
36
|
-
"quantity": {
|
|
37
|
-
"type": "number",
|
|
38
|
-
"description": "How many items the user wants to add to their shopping cart",
|
|
39
|
-
"minimum": 1,
|
|
40
|
-
"maximum": 1000,
|
|
41
|
-
"default": 1
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|