Skip to content

Commit 60facdb

Browse files
committed
feat: add club information and events parsing to the parser and do some refactoring
1 parent 4ca52bf commit 60facdb

4 files changed

Lines changed: 90 additions & 35 deletions

File tree

src/data_parser/db/db.go

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,54 @@ package db
22

33
import (
44
"context"
5-
"log"
5+
"fmt"
66
"os"
77

8+
"github.com/aws/aws-sdk-go-v2/aws"
89
"github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue"
910
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
10-
"github.com/umlcloudcomputing/immersion/dataparser/models"
11+
"github.com/umlcloudcomputing/immersion/dataparser/util"
1112
)
1213

13-
var (
14-
OrganizationTableName = os.Getenv("ORGANIZATION_TABLE")
14+
type TableName int
15+
16+
const (
17+
ServerTable TableName = iota
18+
OnboardingTable
19+
CacheTable
20+
EventTable
1521
)
1622

17-
func InsertOnboarding(ctx context.Context, db *dynamodb.Client, org models.Onboarding) {
18-
item, err := attributevalue.MarshalMap(org)
19-
if err != nil {
20-
log.Fatal(item)
21-
}
23+
var tableNames = map[TableName]string{
24+
ServerTable: os.Getenv("SERVER_TABLE"),
25+
OnboardingTable: os.Getenv("ORGANIZATION_TABLE"),
26+
CacheTable: os.Getenv("CACHE_TABLE"),
27+
EventTable: os.Getenv("EVENT_TABLE"),
28+
}
29+
30+
func InsertItem(ctx context.Context, db *dynamodb.Client, table TableName, data any) {
31+
item, err := attributevalue.MarshalMap(data)
32+
util.CheckError(err)
2233

2334
input := dynamodb.PutItemInput{
24-
TableName: &OrganizationTableName,
35+
TableName: aws.String(tableNames[table]),
2536
Item: item,
2637
}
2738

2839
_, err = db.PutItem(ctx, &input)
29-
if err != nil {
30-
log.Fatal(err)
31-
}
40+
util.CheckError(err)
41+
fmt.Printf("Inserted an item into %s\n", tableNames[table])
3242
}
43+
44+
//func InsertOnboarding(ctx context.Context, db *dynamodb.Client, org models.Onboarding) {
45+
// item, err := attributevalue.MarshalMap(org)
46+
// util.CheckError(err)
47+
//
48+
// input := dynamodb.PutItemInput{
49+
// TableName: &OrganizationTableName,
50+
// Item: item,
51+
// }
52+
//
53+
// _, err = db.PutItem(ctx, &input)
54+
// util.CheckError(err)
55+
//}

src/data_parser/main.go

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,46 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"log"
87
"os"
98

109
"github.com/aws/aws-sdk-go-v2/config"
1110
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
1211
"github.com/aws/aws-sdk-go-v2/service/sqs"
1312
"github.com/umlcloudcomputing/immersion/dataparser/db"
1413
"github.com/umlcloudcomputing/immersion/dataparser/models"
14+
"github.com/umlcloudcomputing/immersion/dataparser/util"
1515
)
1616

17-
func parseMessage(dbClient *dynamodb.Client, message string) {
17+
func filterMessage(dbClient *dynamodb.Client, message string) {
1818
var parsedMessage models.Message[any]
1919
err := json.Unmarshal([]byte(message), &parsedMessage)
20-
if err != nil {
21-
log.Fatal(err)
22-
}
20+
util.CheckError(err)
2321

2422
fmt.Printf("Parsed a message with the %s header\n", parsedMessage.Header)
2523

24+
ctx := context.TODO()
2625
switch parsedMessage.Header {
26+
case "club_information":
27+
var informationData models.Message[models.ClubInformation]
28+
err = json.Unmarshal([]byte(message), &informationData.Body)
29+
util.CheckError(err)
30+
31+
db.InsertItem(ctx, dbClient, db.CacheTable, informationData)
2732
case "onboarding":
2833
var onboardingData models.Message[[]models.Onboarding]
2934
err = json.Unmarshal([]byte(message), &onboardingData)
30-
if err != nil {
31-
log.Fatal(err)
35+
util.CheckError(err)
36+
37+
for _, i := range onboardingData.Body {
38+
db.InsertItem(ctx, dbClient, db.OnboardingTable, i)
3239
}
40+
case "event":
41+
var eventData models.Message[[]models.Event]
42+
err = json.Unmarshal([]byte(message), &eventData)
43+
util.CheckError(err)
3344

34-
for _, v := range onboardingData.Body {
35-
db.InsertOnboarding(context.TODO(), dbClient, v)
45+
for _, i := range eventData.Body {
46+
db.InsertItem(ctx, dbClient, db.EventTable, i)
3647
}
3748
}
3849
}
@@ -41,9 +52,7 @@ func main() {
4152
queueUrl := os.Getenv("QUEUE_URL")
4253

4354
cfg, err := config.LoadDefaultConfig(context.TODO())
44-
if err != nil {
45-
log.Fatal(err)
46-
}
55+
util.CheckError(err)
4756

4857
sqsClient := sqs.NewFromConfig(cfg)
4958
dbClient := dynamodb.NewFromConfig(cfg)
@@ -53,32 +62,26 @@ func main() {
5362
MaxNumberOfMessages: 5, // play around with these
5463
WaitTimeSeconds: 5,
5564
})
56-
if err != nil {
57-
log.Fatal(err)
58-
}
65+
util.CheckError(err)
5966

6067
// print and delete all messages in the queue
6168
for len(response.Messages) > 0 {
6269
for _, v := range response.Messages {
6370

64-
parseMessage(dbClient, *v.Body)
71+
filterMessage(dbClient, *v.Body)
6572
_, err = sqsClient.DeleteMessage(context.TODO(), &sqs.DeleteMessageInput{
6673
QueueUrl: &queueUrl,
6774
ReceiptHandle: v.ReceiptHandle,
6875
})
69-
if err != nil {
70-
log.Fatal(err)
71-
}
76+
util.CheckError(err)
7277
}
7378

7479
response, err = sqsClient.ReceiveMessage(context.TODO(), &sqs.ReceiveMessageInput{
7580
QueueUrl: &queueUrl,
7681
MaxNumberOfMessages: 5,
7782
WaitTimeSeconds: 5,
7883
})
79-
if err != nil {
80-
log.Fatal(err)
81-
}
84+
util.CheckError(err)
8285
}
8386

8487
fmt.Println("Parsing complete, waiting to be killed.")

src/data_parser/models/models.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,21 @@ type Onboarding struct {
1212
ImageUrl string `json:"ImageUrl" dynamodbav:"imageUrl"`
1313
WebsiteKey string `json:"WebsiteKey" dynamodbav:"websiteKey"`
1414
}
15+
16+
type ClubInformation struct {
17+
OrgId int `json:"OrgId" dynamodbav:"organizationId"`
18+
Name string `json:"Name" dynamodbav:"name"`
19+
PrimaryContact string `json:"PrimaryContact" dynamodbav:"primaryContact"`
20+
ImageUrl string `json:"ImageUrl" dynamodbav:"imageUrl"`
21+
WebsiteKey string `json:"WebsiteKey" dynamodbav:"websiteKey"`
22+
NumMembers int `json:"NumMembers" dynamodbav:"numMembers"`
23+
Settings string `json:"settings" dynamodbav:"settings"`
24+
}
25+
26+
type Event struct {
27+
LinkedOrgId int `json:"LinkedOrgId" dynamodbav:"linkedOrgId"`
28+
Name string `json:"Name" dynamodbav:"name"`
29+
Date string `json:"Date" dynamodbav:"date"`
30+
Time string `json:"Time" dynamodbav:"time"`
31+
Description string `json:"Description" dynamodbav:"description"`
32+
}

src/data_parser/util/util.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package util
2+
3+
import (
4+
"log"
5+
)
6+
7+
func CheckError(err error) {
8+
if err != nil {
9+
log.Fatal(err)
10+
}
11+
}

0 commit comments

Comments
 (0)