Skip to content

Commit df187f5

Browse files
Auto-update feature branch with changes from the main branch
2 parents f424361 + 186bb4a commit df187f5

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

src/api/functions/store.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// TODO: (store) Create a function to check if a given product and variant are sellable to a given user
2+
// If it is sellable, return the price ID to create a stripe checkout session for
3+
4+
import { type DynamoDBClient } from "@aws-sdk/client-dynamodb";
5+
import { type Redis } from "api/types.js";
6+
7+
// If not, return null.
8+
export type CheckItemSellableInputs = {
9+
userId: string; // This is generally their Illinois email
10+
productId: string;
11+
variantId: string;
12+
dynamoClient: DynamoDBClient;
13+
redisClient: Redis;
14+
};
15+
16+
export type CheckItemSellableOutputs = null | string;
17+
18+
export async function checkItemSellable({
19+
userId,
20+
productId,
21+
variantId,
22+
dynamoClient,
23+
redisClient,
24+
}: CheckItemSellableInputs): Promise<CheckItemSellableOutputs> {
25+
// In a transaction:
26+
// First, check if there is stock.
27+
// If there is stock, check that the user is still under their limit.
28+
// If there is, check if they are a paid member.
29+
// If paid member return member_price_id for the variant request, if not return the nonmember_price_id
30+
return null;
31+
}
32+
33+
export type CreateCheckoutSessionInputs = {
34+
priceId: string;
35+
username: string;
36+
stripeApiKey: string;
37+
};
38+
39+
export type CreateCheckoutSessionOutputs = string;
40+
41+
export async function createCheckoutSession({
42+
priceId,
43+
}: CreateCheckoutSessionInputs): Promise<CreateCheckoutSessionOutputs> {
44+
// Check stripe modules createCheckoutSession function
45+
// initatior string should be "acm-store"
46+
return "";
47+
}

src/common/config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ export type GenericConfigType = {
6464
UserInfoTable: string;
6565
SigInfoTableName: string;
6666
EntraHostedDomainName: string;
67+
StoreInventoryTableName: string;
68+
// TODO: (store) add other tables
6769
};
6870

6971
type EnvironmentConfigType = {
@@ -106,6 +108,7 @@ const genericConfig: GenericConfigType = {
106108
UserInfoTable: "infra-core-api-user-info",
107109
SigInfoTableName: "infra-core-api-sigs",
108110
EntraHostedDomainName: "acmillinois.onmicrosoft.com",
111+
StoreInventoryTableName: "infra-core-api-store-inventory"
109112
} as const;
110113

111114
const environmentConfig: EnvironmentConfigType = {

terraform/modules/dynamo/main.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,3 +339,22 @@ resource "aws_dynamodb_table" "sig_info" {
339339
projection_type = "KEYS_ONLY"
340340
}
341341
}
342+
343+
resource "aws_dynamodb_table" "store_inventory" {
344+
billing_mode = "PAY_PER_REQUEST"
345+
name = "${var.ProjectId}-store-inventory"
346+
deletion_protection_enabled = true
347+
hash_key = "productId"
348+
range_key = "variantId"
349+
point_in_time_recovery {
350+
enabled = true
351+
}
352+
attribute {
353+
name = "productId"
354+
type = "S"
355+
}
356+
attribute {
357+
name = "variantId"
358+
type = "S"
359+
}
360+
}

0 commit comments

Comments
 (0)