Skip to content

Commit

Permalink
Merge pull request #37 from aws-cloud-clubs/feat/follow_function_fix
Browse files Browse the repository at this point in the history
Feat/follow function fix
  • Loading branch information
dlrkdus authored Aug 9, 2024
2 parents 5bd72c8 + e4fa85b commit 015870c
Show file tree
Hide file tree
Showing 76 changed files with 2,697 additions and 11 deletions.
Binary file added .DS_Store
Binary file not shown.
59 changes: 59 additions & 0 deletions .github/workflows.follow_deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: deploy_lambda

on:
push:
branches: [ feat/follow_service#6 ]
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test Deploy'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: JDK 세팅
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle without test
run: ./gradlew clean build buildZip

- name: Create deployment package
run: |
mkdir -p deployment
cp build/libs/*.jar deployment/
if [ -d "lib" ]; then
cp -R lib/* deployment/
fi
cd deployment
zip -r ../follow_service.zip .
- name: AWS 계정 세팅
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}

- name: S3에 패키지 업로드
run: |
aws s3 cp follow_service.zip s3://gureumi-s3/lambda-function.zip
- name: 람다 배포
run: |
aws lambda update-function-code \
--function-name ${{ secrets.LAMBDA_FOLLOW_FUNCTION_NAME }} \
--s3-bucket gureumi-s3 \
--s3-key lambda-function.zip
61 changes: 61 additions & 0 deletions .github/workflows/deploy_lambda.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: deploy_lambda

on:
push:
branches: [ feat/like_service ]
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test Deploy'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: JDK 세팅
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle without test
run: ./gradlew clean build -x test buildZip

- name: Create deployment package
run: |
mkdir -p deployment
cp build/distributions/lambda-function.zip deployment/
if [ -d "lib" ]; then
cp -R lib/* deployment/
fi
cd deployment
zip -r ../function.zip .
- name: AWS 계정 세팅
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}

- name: S3에 패키지 업로드
run: |
aws s3 cp function.zip s3://gureumi-s3/deploy/function.zip
- name: 람다 배포
run: |
aws lambda update-function-code \
--function-name ${{ secrets.LAMBDA_FUNCTION_NAME }} \
--s3-bucket gureumi-s3 \
--s3-key deploy/function.zip
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
/src/main/resources/application.yml

### STS ###
.apt_generated
Expand Down
51 changes: 51 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,36 @@ repositories {
mavenCentral()
}

jar {
manifest {
attributes(
'Manifest-Version': '1.0',
'Main-Class': 'com.goormy.hackathon.HackathonApplication'
)
}
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'


implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.1")
implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs'
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws:4.0.0'
implementation 'org.springframework.cloud:spring-cloud-starter-function-web:4.0.0'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.1")
implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs'
implementation 'redis.clients:jedis:4.0.1'
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws:4.0.0'
implementation 'org.springframework.cloud:spring-cloud-starter-function-web:4.0.0'

compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
Expand All @@ -38,3 +64,28 @@ dependencies {
tasks.named('test') {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Manifest-Version': '1.0',
'Main-Class': 'com.goormy.hackathon.HackathonApplication'
)
}
}


task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtimeClasspath
}
into('lib') {
from jar.archiveFile
}
archiveFileName = 'lambda-function.zip'
destinationDirectory = file("$buildDir/distributions")
}

build.dependsOn buildZip

Empty file modified gradlew
100644 → 100755
Empty file.
2 changes: 2 additions & 0 deletions src/main/java/com/goormy/hackathon/HackathonApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class HackathonApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.goormy.hackathon.common.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import org.springframework.stereotype.Component;

@Component
public class LocalDateTimeConverter_DS {

private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

public LocalDateTime convertToLocalDateTime(String source) {
try {
return LocalDateTime.parse(source, formatter);
} catch (DateTimeParseException e) {
throw new IllegalArgumentException(
"Invalid date time format. Please use this pattern: yyyy-MM-dd HH:mm:ss");
}
}

public String convertToString(LocalDateTime source) {
return source.format(formatter);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.goormy.hackathon.common.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public final class LocalDateTimeConverter__SY {

private LocalDateTimeConverter__SY() {
}

public static String convert(LocalDateTime value) {
return value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}

}
32 changes: 32 additions & 0 deletions src/main/java/com/goormy/hackathon/config/AwsConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.goormy.hackathon.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;

@Configuration
public class AwsConfig {


@Value("${spring.cloud.aws.credentials.access-key}")
private String accessKey;

@Value("${spring.cloud.aws.credentials.secret-key}")
private String secretKey;

@Value("${spring.cloud.aws.region.static}")
private String region;

@Bean
public SqsClient sqsClient() {
return SqsClient.builder()
.region(Region.of(region))
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)))
.build();
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.goormy.hackathon.controller;

import com.goormy.hackathon.dto.HashtagDto_sieun;
import com.goormy.hackathon.entity.Hashtag;
import com.goormy.hackathon.entity.User;
import com.goormy.hackathon.service.FollowSQSService;
import com.goormy.hackathon.service.FollowService;
import com.goormy.hackathon.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

@RestController
public class FollowController {

@Autowired
private FollowSQSService followSQSService;

@Autowired
private FollowService followService;

@Autowired
private UserService userService;

@PostMapping("/follow")
public ResponseEntity<String> follow(@RequestHeader long userId, @RequestParam long hashtagId) {
followSQSService.sendFollowRequest(userId,hashtagId);
return ResponseEntity.noContent().build();
}

@PostMapping("/unfollow")
public ResponseEntity<String> unfollow(@RequestHeader long userId, @RequestParam long hashtagId) {
followSQSService.sendUnfollowRequest(userId,hashtagId);
return ResponseEntity.noContent().build();
}

@GetMapping("/followings")
public List<HashtagDto_sieun> getFollowedHashtags(@RequestHeader("userId") Long userId) {
User user = userService.findById(userId);

List<Hashtag> hashtags = followService.getFollowedHashtags(user);

return hashtags.stream()
.map(hashtag -> new HashtagDto_sieun(hashtag.getId(), hashtag.getName(), hashtag.getType().toString()))
.collect(Collectors.toList());
}


}
Loading

0 comments on commit 015870c

Please sign in to comment.