Skip to content

Commit 92edd66

Browse files
tvanhensTyler van Hensbergen
and
Tyler van Hensbergen
authored
feat: add todos crud lambdas to devx template (#10)
Co-authored-by: Tyler van Hensbergen <[email protected]>
1 parent 3e0dd6c commit 92edd66

File tree

7 files changed

+167
-4
lines changed

7 files changed

+167
-4
lines changed

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,23 @@
2424
"devDependencies": {
2525
"@types/cross-spawn": "^6.0.2",
2626
"@types/mustache": "^4.2.1",
27-
"@types/node": "^18.7.14",
27+
"@types/node": "^18.7.18",
2828
"@types/prompts": "^2.0.14",
29+
"@types/uuid": "^8.3.4",
2930
"@types/validate-npm-package-name": "^4.0.0",
3031
"aws-cdk-lib": "^2.40.0",
3132
"chalk": "^5.0.1",
3233
"commander": "^9.4.0",
3334
"cross-spawn": "^7.0.3",
3435
"esbuild": "^0.15.6",
36+
"fl-exp": "^1.0.3",
3537
"functionless": "^0.22.6",
3638
"mustache": "^4.2.0",
3739
"prompts": "^2.4.2",
3840
"rimraf": "^3.0.2",
3941
"semantic-release": "^19.0.5",
4042
"typescript": "^4.8.2",
43+
"uuid": "^9.0.0",
4144
"validate-npm-package-name": "^4.0.0"
4245
},
4346
"release": {
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{
22
"extend": "base",
3-
"devDependencies": ["fl-exp"],
4-
"files": ["cdk.json", "src/my-stack/_stack.ts"]
3+
"devDependencies": ["@types/uuid", "fl-exp", "uuid"],
4+
"files": [
5+
"cdk.json",
6+
"src/my-stack/_stack.ts",
7+
"src/my-stack/create-todo.ts",
8+
"src/my-stack/delete-todo.ts",
9+
"src/my-stack/list-todos.ts",
10+
"src/my-stack/table.ts"
11+
]
512
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Function } from "fl-exp";
2+
import { $AWS } from "functionless";
3+
import * as uuid from "uuid";
4+
5+
import { AppTable } from "./table";
6+
7+
export default Function(async (event: { message: string }) => {
8+
const id = uuid.v4();
9+
await $AWS.DynamoDB.PutItem({
10+
Table: AppTable,
11+
Item: {
12+
pk: {
13+
S: "todo",
14+
},
15+
sk: {
16+
S: id,
17+
},
18+
id: {
19+
S: id,
20+
},
21+
message: {
22+
S: event.message,
23+
},
24+
type: {
25+
S: "todo",
26+
},
27+
},
28+
});
29+
30+
return "CREATED";
31+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Function } from "fl-exp";
2+
import { $AWS } from "functionless";
3+
4+
import { AppTable } from "./table";
5+
6+
export default Function(async (event: { id: string }) => {
7+
await $AWS.DynamoDB.DeleteItem({
8+
Table: AppTable,
9+
Key: {
10+
pk: {
11+
S: "todo",
12+
},
13+
sk: {
14+
S: event.id,
15+
},
16+
},
17+
});
18+
19+
return "DELETED";
20+
});
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Function } from "fl-exp";
2+
import { $AWS } from "functionless";
3+
4+
import { AppTable } from "./table";
5+
6+
export default Function(async (event: {}) => {
7+
const response = await $AWS.DynamoDB.Query({
8+
Table: AppTable,
9+
KeyConditionExpression: "#pk = :pk",
10+
ExpressionAttributeNames: {
11+
"#pk": "pk",
12+
},
13+
ExpressionAttributeValues: {
14+
":pk": {
15+
S: "todo",
16+
},
17+
},
18+
});
19+
20+
return (response.Items ?? []).map((item) => {
21+
return {
22+
id: item.id.S,
23+
message: item.message.S,
24+
};
25+
});
26+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { AttributeType, BillingMode } from "aws-cdk-lib/aws-dynamodb";
2+
import { Table } from "fl-exp";
3+
4+
interface TableItem<T extends string> {
5+
pk: T;
6+
sk: string;
7+
type: T;
8+
id: string;
9+
}
10+
11+
interface Todo extends TableItem<"todo"> {
12+
message: string;
13+
}
14+
15+
export const AppTable = Table<Todo, "pk", "sk">({
16+
partitionKey: {
17+
name: "pk",
18+
type: AttributeType.STRING,
19+
},
20+
sortKey: {
21+
name: "sk",
22+
type: AttributeType.STRING,
23+
},
24+
billingMode: BillingMode.PAY_PER_REQUEST,
25+
});
26+
27+
export default AppTable;

yarn.lock

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,11 +629,16 @@
629629
resolved "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.1.tgz"
630630
integrity sha512-gFAlWL9Ik21nJioqjlGCnNYbf9zHi0sVbaZ/1hQEBcCEuxfLJDvz4bVJSV6v6CUaoLOz0XEIoP7mSrhJ6o237w==
631631

632-
"@types/node@*", "@types/node@^18.7.14":
632+
"@types/node@*":
633633
version "18.7.14"
634634
resolved "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz"
635635
integrity sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==
636636

637+
"@types/node@^18.7.18":
638+
version "18.7.18"
639+
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154"
640+
integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==
641+
637642
"@types/normalize-package-data@^2.4.0":
638643
version "2.4.1"
639644
resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz"
@@ -656,6 +661,11 @@
656661
resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz"
657662
integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
658663

664+
"@types/uuid@^8.3.4":
665+
version "8.3.4"
666+
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc"
667+
integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==
668+
659669
"@types/validate-npm-package-name@^4.0.0":
660670
version "4.0.0"
661671
resolved "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz"
@@ -1220,6 +1230,11 @@ defaults@^1.0.3:
12201230
dependencies:
12211231
clone "^1.0.2"
12221232

1233+
define-lazy-prop@^2.0.0:
1234+
version "2.0.0"
1235+
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
1236+
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
1237+
12231238
define-properties@^1.1.3, define-properties@^1.1.4:
12241239
version "1.1.4"
12251240
resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz"
@@ -1600,6 +1615,14 @@ find-versions@^4.0.0:
16001615
dependencies:
16011616
semver-regex "^3.1.2"
16021617

1618+
fl-exp@^1.0.3:
1619+
version "1.0.3"
1620+
resolved "https://registry.yarnpkg.com/fl-exp/-/fl-exp-1.0.3.tgz#182db0db0350044edf55b26bc38f37a402eb3a91"
1621+
integrity sha512-lgfbijGyaRExFdLV+cbYYe/3U5pdk/IXtRnwHgFsHc9OO7fPxJTkDbldYQAMkcm9Ph/s81iaRGi0+1Nu+2A4qg==
1622+
dependencies:
1623+
commander "^9.4.0"
1624+
open "^8.4.0"
1625+
16031626
from2@^2.3.0:
16041627
version "2.3.0"
16051628
resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz"
@@ -2055,6 +2078,11 @@ is-date-object@^1.0.1:
20552078
dependencies:
20562079
has-tostringtag "^1.0.0"
20572080

2081+
is-docker@^2.0.0, is-docker@^2.1.1:
2082+
version "2.2.1"
2083+
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
2084+
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
2085+
20582086
is-extglob@^2.1.1:
20592087
version "2.1.1"
20602088
resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
@@ -2167,6 +2195,13 @@ is-weakref@^1.0.2:
21672195
dependencies:
21682196
call-bind "^1.0.2"
21692197

2198+
is-wsl@^2.2.0:
2199+
version "2.2.0"
2200+
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
2201+
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
2202+
dependencies:
2203+
is-docker "^2.0.0"
2204+
21702205
isarray@~1.0.0:
21712206
version "1.0.0"
21722207
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
@@ -3011,6 +3046,15 @@ onetime@^5.1.2:
30113046
dependencies:
30123047
mimic-fn "^2.1.0"
30133048

3049+
open@^8.4.0:
3050+
version "8.4.0"
3051+
resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
3052+
integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
3053+
dependencies:
3054+
define-lazy-prop "^2.0.0"
3055+
is-docker "^2.1.1"
3056+
is-wsl "^2.2.0"
3057+
30143058
opener@^1.5.2:
30153059
version "1.5.2"
30163060
resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz"
@@ -4024,6 +4068,11 @@ util-promisify@^2.1.0:
40244068
dependencies:
40254069
object.getownpropertydescriptors "^2.0.3"
40264070

4071+
uuid@^9.0.0:
4072+
version "9.0.0"
4073+
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
4074+
integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
4075+
40274076
v8-compile-cache-lib@^3.0.1:
40284077
version "3.0.1"
40294078
resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"

0 commit comments

Comments
 (0)