diff --git a/README.md b/README.md
index 913012b3a..6316eb203 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,92 @@
-# 2023-hang-log
+
-
-![Group 2695 (1)](https://github.com/woowacourse-teams/2023-hang-log/assets/77482065/cfddda8a-e416-4f03-bc53-edd6eb0c4595)
+## [행록 바로가기](https://hanglog.com)
+
-## 멤버
+
+
+
+
+
+
+
+
+
+![image2](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/2981c210-cda3-4644-887f-45ee14268767)
+
+![image](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/c2fc4007-d9ba-4f6b-9f64-04c29fc46078)
+
+![image4](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/29c24162-8702-4b47-87f6-0b703b4060fb)
+
+![image5](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/1205a54a-58c1-4b63-8062-c89274658f9d)
+
+![image6](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/6c4ab178-b9ca-4141-a904-f493a68ca082)
+
+![image7](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/b3829bde-7870-4836-adab-3d1add7b42a1)
+
+![image8](https://github.com/woowacourse-teams/2023-hang-log/assets/102305630/bc5d2fc3-1cbc-4cf6-9602-c63872034f6c)
+
+### [행록 바로가기 ](https://hanglog.com)
+
+
+
+
+
+
+
+## 기술 스택
### 프론트엔드
-| | | |
-|:-----------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------:|
-| [슬링키](https://github.com/dladncks1217) | [애슐리](https://github.com/ashleysyheo) | [헤다](https://github.com/Dahyeeee) |
+
### 백엔드
-| | | | | |
-|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|
-| [이오](https://github.com/LJW25) | [디노](https://github.com/jjongwa) | [라온](https://github.com/mcodnjs) | [홍고](https://github.com/hgo641) | [달리](https://github.com/waterricecake) |
+
+
+### 인프라
+
+
+
+
+## 서비스 요청 흐름도
-![README 인프라 구조 008](https://github.com/woowacourse-teams/2023-hang-log/assets/77482065/eb0d792c-9699-4010-95b4-a29e5ab76687)
+![서비스요청흐름도](https://github.com/woowacourse-teams/2023-hang-log/assets/102305630/dc9c1562-068d-4c73-84ef-d93e9051b679)
-![README 인프라 구조 007](https://github.com/woowacourse-teams/2023-hang-log/assets/77482065/e9e38e63-ad72-45cc-80f8-883ae68aa29e)
+## 인프라 구조도
-![README 인프라 구조 001](https://github.com/woowacourse-teams/2023-hang-log/assets/77482065/1e73f647-7774-450e-863c-7dbc906f5e4d)
+![인프라 구조도](https://github.com/woowacourse-teams/2023-hang-log/assets/102305630/656caaa3-125d-48ed-b996-e2858be4d36c)
+
+## CI/CD
+
+![CICD](https://github.com/woowacourse-teams/2023-hang-log/assets/64852591/a55b3a1c-ce12-49d2-b4da-5b394c4de6c1)
+
+## 모니터링 구조도
+
+![모니터링 구조도](https://github.com/woowacourse-teams/2023-hang-log/assets/64852591/26da0064-7caf-42a7-b341-4e1f9db99865)
+
+## 이미지 요청 흐름도
+
+![이미지 요청 흐름도](https://github.com/woowacourse-teams/2023-hang-log/assets/64852591/65cdfaea-e546-43ab-80b3-2c57c9336544)
+
+## [행록 디자인 시스템](https://github.com/hang-log-design-system/design-system)
+
+![행록디자인시스템](https://github.com/woowacourse-teams/2023-hang-log/assets/49433615/23457a14-fb21-498c-9b65-a6c92826a0c3)
+
+
+
+## 멤버
+
+### 프론트엔드
+
+| | | |
+| :---------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------: |
+| [슬링키](https://github.com/dladncks1217) | [애슐리](https://github.com/ashleysyheo) | [헤다](https://github.com/Dahyeeee) |
+
+### 백엔드
+
+| | | | | |
+| :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: |
+| [이오](https://github.com/LJW25) | [디노](https://github.com/jjongwa) | [라온](https://github.com/mcodnjs) | [홍고](https://github.com/hgo641) | [달리](https://github.com/waterricecake) |
diff --git a/backend/backend-submodule b/backend/backend-submodule
index 251536b9c..c8ac913af 160000
--- a/backend/backend-submodule
+++ b/backend/backend-submodule
@@ -1 +1 @@
-Subproject commit 251536b9ca71fca672f25d5685a3526634739c22
+Subproject commit c8ac913af608cbaffc233280c25923ff129bf317
diff --git a/backend/build.gradle b/backend/build.gradle
index 056e6bebe..0d6c59415 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -28,7 +28,6 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
- implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.528'
@@ -90,7 +89,7 @@ processResources.dependsOn('copySecret')
tasks.register('copySecret', Copy) {
from './backend-submodule'
- include 'application.yml'
+ include 'application*.yml'
into './src/main/resources'
}
diff --git a/backend/src/docs/asciidoc/docs.adoc b/backend/src/docs/asciidoc/docs.adoc
index 12f62301c..b0942cb60 100644
--- a/backend/src/docs/asciidoc/docs.adoc
+++ b/backend/src/docs/asciidoc/docs.adoc
@@ -88,6 +88,27 @@ include::{snippets}/trip-controller-test/delete-trip/path-parameters.adoc[]
==== 응답
include::{snippets}/trip-controller-test/delete-trip/http-response.adoc[]
+=== 가계부 조회 (GET /trips/:tripId/expense)
+
+==== 요청
+include::{snippets}/trip-controller-test/get-ledger/http-request.adoc[]
+include::{snippets}/trip-controller-test/get-ledger/path-parameters.adoc[]
+
+==== 응답
+include::{snippets}/trip-controller-test/get-ledger/http-response.adoc[]
+include::{snippets}/trip-controller-test/get-ledger/response-fields.adoc[]
+
+=== 공유 상태 수정 (PATCH /trips/:tripId/share)
+
+==== 요청
+include::{snippets}/trip-controller-test/update-shared-status/http-request.adoc[]
+include::{snippets}/trip-controller-test/update-shared-status/path-parameters.adoc[]
+include::{snippets}/trip-controller-test/update-shared-status/request-fields.adoc[]
+
+==== 응답
+include::{snippets}/trip-controller-test/update-shared-status/http-response.adoc[]
+include::{snippets}/trip-controller-test/update-shared-status/path-parameters.adoc[]
+
=== 공개 상태 수정 (PATCH /trips/:tripId/publish)
@@ -210,56 +231,57 @@ include::{snippets}/category-controller-test/get-expense-categories/http-request
include::{snippets}/category-controller-test/get-expense-categories/http-response.adoc[]
include::{snippets}/category-controller-test/get-expense-categories/response-fields.adoc[]
-== 경비 API
-
-=== 경비 조회 (GET /trips/:tripId/expense)
-
-==== 요청
-include::{snippets}/expense-controller-test/get-expenses/http-request.adoc[]
-include::{snippets}/expense-controller-test/get-expenses/path-parameters.adoc[]
-
-==== 응답
-include::{snippets}/expense-controller-test/get-expenses/http-response.adoc[]
-include::{snippets}/expense-controller-test/get-expenses/response-fields.adoc[]
-
== 멤버 API
=== 로그인 (POST /login/:provider)
==== 요청
-include::{snippets}/auth-controller-test/login/http-request.adoc[]
-include::{snippets}/auth-controller-test/login/path-parameters.adoc[]
-include::{snippets}/auth-controller-test/login/request-fields.adoc[]
+include::{snippets}/login-controller-test/login/http-request.adoc[]
+include::{snippets}/login-controller-test/login/path-parameters.adoc[]
+include::{snippets}/login-controller-test/login/request-fields.adoc[]
==== 응답
-include::{snippets}/auth-controller-test/login/http-response.adoc[]
+include::{snippets}/login-controller-test/login/http-response.adoc[]
응답 쿠키
-include::{snippets}/auth-controller-test/login/response-cookies.adoc[]
-include::{snippets}/auth-controller-test/login/response-fields.adoc[]
+include::{snippets}/login-controller-test/login/response-cookies.adoc[]
+include::{snippets}/login-controller-test/login/response-fields.adoc[]
=== 토큰 재발급 (POST /token)
==== 요청
-include::{snippets}/auth-controller-test/extend-login/http-request.adoc[]
+include::{snippets}/login-controller-test/extend-login/http-request.adoc[]
요청 쿠키
-include::{snippets}/auth-controller-test/extend-login/request-cookies.adoc[]
-include::{snippets}/auth-controller-test/extend-login/request-fields.adoc[]
+include::{snippets}/login-controller-test/extend-login/request-cookies.adoc[]
+include::{snippets}/login-controller-test/extend-login/request-fields.adoc[]
==== 응답
-include::{snippets}/auth-controller-test/extend-login/http-response.adoc[]
-include::{snippets}/auth-controller-test/extend-login/response-fields.adoc[]
+include::{snippets}/login-controller-test/extend-login/http-response.adoc[]
+include::{snippets}/login-controller-test/extend-login/response-fields.adoc[]
=== 로그아웃 (POST /logout)
==== 요청
-include::{snippets}/auth-controller-test/logout/http-request.adoc[]
+include::{snippets}/login-controller-test/logout/http-request.adoc[]
+요청 헤더
+include::{snippets}/login-controller-test/logout/request-headers.adoc[]
+요청 쿠키
+include::{snippets}/login-controller-test/logout/request-cookies.adoc[]
+
+==== 응답
+include::{snippets}/login-controller-test/logout/http-response.adoc[]
+
+=== 회원 탈퇴 (DELETE /account)
+
+==== 요청
+include::{snippets}/login-controller-test/delete-account/http-request.adoc[]
요청 헤더
-include::{snippets}/auth-controller-test/logout/request-headers.adoc[]
+include::{snippets}/login-controller-test/delete-account/request-headers.adoc[]
요청 쿠키
-include::{snippets}/auth-controller-test/logout/request-cookies.adoc[]
+include::{snippets}/login-controller-test/delete-account/request-cookies.adoc[]
==== 응답
-include::{snippets}/auth-controller-test/logout/http-response.adoc[]
+include::{snippets}/login-controller-test/delete-account/http-response.adoc[]
+
=== 마이 페이지 조회 (GET /mypage)
@@ -298,17 +320,6 @@ include::{snippets}/shared-trip-controller-test/get-shared-trip/path-parameters.
include::{snippets}/shared-trip-controller-test/get-shared-trip/http-response.adoc[]
include::{snippets}/shared-trip-controller-test/get-shared-trip/response-fields.adoc[]
-=== 공유 상태 수정 (PATCH /trips/:tripId/share)
-
-==== 요청
-include::{snippets}/shared-trip-controller-test/update-shared-status/http-request.adoc[]
-include::{snippets}/shared-trip-controller-test/update-shared-status/path-parameters.adoc[]
-include::{snippets}/shared-trip-controller-test/update-shared-status/request-fields.adoc[]
-
-==== 응답
-include::{snippets}/shared-trip-controller-test/update-shared-status/http-response.adoc[]
-include::{snippets}/shared-trip-controller-test/update-shared-status/path-parameters.adoc[]
-
=== 공유된 여행 경비 조회 (GET /shared-trips/:shareCode/expense)
==== 요청
diff --git a/backend/src/main/java/hanglog/HangLogApplication.java b/backend/src/main/java/hanglog/HangLogApplication.java
index 4fca7ba07..e0095b058 100644
--- a/backend/src/main/java/hanglog/HangLogApplication.java
+++ b/backend/src/main/java/hanglog/HangLogApplication.java
@@ -3,8 +3,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
+@EnableAsync
@EnableJpaAuditing
@EnableScheduling
@SpringBootApplication
diff --git a/backend/src/main/java/hanglog/auth/domain/repository/RefreshTokenRepository.java b/backend/src/main/java/hanglog/auth/domain/repository/RefreshTokenRepository.java
deleted file mode 100644
index 8915084dc..000000000
--- a/backend/src/main/java/hanglog/auth/domain/repository/RefreshTokenRepository.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package hanglog.auth.domain.repository;
-
-import hanglog.auth.domain.RefreshToken;
-import java.util.Optional;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface RefreshTokenRepository extends JpaRepository {
-
- Optional findByToken(final String token);
-
- boolean existsByToken(final String token);
-
- void deleteByMemberId(final Long memberId);
-}
diff --git a/backend/src/main/java/hanglog/category/domain/Category.java b/backend/src/main/java/hanglog/category/domain/Category.java
index 411f4faee..438e162ab 100644
--- a/backend/src/main/java/hanglog/category/domain/Category.java
+++ b/backend/src/main/java/hanglog/category/domain/Category.java
@@ -6,6 +6,7 @@
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
+import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -28,4 +29,21 @@ public class Category extends BaseEntity {
@Column(nullable = false, length = 50)
private String korName;
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Category category)) {
+ return false;
+ }
+ return Objects.equals(id, category.id) && Objects.equals(engName, category.engName)
+ && Objects.equals(korName, category.korName);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, engName, korName);
+ }
}
diff --git a/backend/src/main/java/hanglog/category/domain/ExpenseCategories.java b/backend/src/main/java/hanglog/category/domain/ExpenseCategories.java
new file mode 100644
index 000000000..ce6a8b883
--- /dev/null
+++ b/backend/src/main/java/hanglog/category/domain/ExpenseCategories.java
@@ -0,0 +1,20 @@
+package hanglog.category.domain;
+
+import java.util.List;
+import java.util.Optional;
+
+public class ExpenseCategories {
+
+ private static List expenseCategories;
+
+ private ExpenseCategories() {
+ }
+
+ public static Optional> get() {
+ return Optional.ofNullable(expenseCategories);
+ }
+
+ public static void init(final List expenseCategories) {
+ ExpenseCategories.expenseCategories = expenseCategories;
+ }
+}
diff --git a/backend/src/main/java/hanglog/category/service/CategoryService.java b/backend/src/main/java/hanglog/category/service/CategoryService.java
index e7bdc5568..bb2fecba3 100644
--- a/backend/src/main/java/hanglog/category/service/CategoryService.java
+++ b/backend/src/main/java/hanglog/category/service/CategoryService.java
@@ -10,11 +10,12 @@
@Service
@RequiredArgsConstructor
-@Transactional(readOnly = true)
+@Transactional
public class CategoryService {
private final CategoryRepository categoryRepository;
+ @Transactional(readOnly = true)
public List getExpenseCategories() {
final List expenseCategories = categoryRepository.findExpenseCategory();
return expenseCategories.stream()
diff --git a/backend/src/main/java/hanglog/city/domain/repository/CityRepository.java b/backend/src/main/java/hanglog/city/domain/repository/CityRepository.java
index 04b45d7ff..1f4340b6e 100644
--- a/backend/src/main/java/hanglog/city/domain/repository/CityRepository.java
+++ b/backend/src/main/java/hanglog/city/domain/repository/CityRepository.java
@@ -1,7 +1,25 @@
package hanglog.city.domain.repository;
import hanglog.city.domain.City;
+import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
public interface CityRepository extends JpaRepository {
+
+ @Query("""
+ SELECT c
+ FROM City c
+ WHERE c.id in :ids
+ """)
+ List findCitiesByIds(@Param("ids") final List ids);
+
+ @Query("""
+ SELECT c
+ FROM City c, TripCity tc
+ WHERE c.id = tc.city.id
+ AND tc.trip.id = :tripId
+ """)
+ List findCitiesByTripId(@Param("tripId") final Long tripId);
}
diff --git a/backend/src/main/java/hanglog/city/service/CityService.java b/backend/src/main/java/hanglog/city/service/CityService.java
index a0f864707..5649c40b8 100644
--- a/backend/src/main/java/hanglog/city/service/CityService.java
+++ b/backend/src/main/java/hanglog/city/service/CityService.java
@@ -1,8 +1,8 @@
package hanglog.city.service;
-import hanglog.city.dto.response.CityResponse;
import hanglog.city.domain.City;
import hanglog.city.domain.repository.CityRepository;
+import hanglog.city.dto.response.CityResponse;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -15,6 +15,7 @@ public class CityService {
private final CityRepository cityRepository;
+ @Transactional(readOnly = true)
public List getAllCities() {
final List cities = cityRepository.findAll();
return cities.stream()
diff --git a/backend/src/main/java/hanglog/community/domain/BaseTripInfo.java b/backend/src/main/java/hanglog/community/domain/BaseTripInfo.java
deleted file mode 100644
index 85eee6974..000000000
--- a/backend/src/main/java/hanglog/community/domain/BaseTripInfo.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package hanglog.community.domain;
-
-public class BaseTripInfo implements TripInfo {
-
- @Override
- public Long getLikeCount() {
- return 0L;
- }
-
- @Override
- public Boolean getIsLike() {
- return false;
- }
-}
diff --git a/backend/src/main/java/hanglog/community/domain/PublishedTrip.java b/backend/src/main/java/hanglog/community/domain/PublishedTrip.java
index 9ea6183b4..c4ed30601 100644
--- a/backend/src/main/java/hanglog/community/domain/PublishedTrip.java
+++ b/backend/src/main/java/hanglog/community/domain/PublishedTrip.java
@@ -1,16 +1,13 @@
package hanglog.community.domain;
-import static jakarta.persistence.FetchType.LAZY;
import static jakarta.persistence.GenerationType.IDENTITY;
import static lombok.AccessLevel.PROTECTED;
import hanglog.global.BaseEntity;
-import hanglog.trip.domain.Trip;
+import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.OneToOne;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -29,11 +26,10 @@ public class PublishedTrip extends BaseEntity {
@GeneratedValue(strategy = IDENTITY)
private Long id;
- @OneToOne(fetch = LAZY)
- @JoinColumn(name = "trip_id", nullable = false)
- private Trip trip;
+ @Column(nullable = false)
+ private Long tripId;
- public PublishedTrip(final Trip trip) {
- this(null, trip);
+ public PublishedTrip(final Long tripId) {
+ this(null, tripId);
}
}
diff --git a/backend/src/main/java/hanglog/community/domain/TripInfo.java b/backend/src/main/java/hanglog/community/domain/TripInfo.java
deleted file mode 100644
index c6dd2cb99..000000000
--- a/backend/src/main/java/hanglog/community/domain/TripInfo.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package hanglog.community.domain;
-
-public interface TripInfo {
-
- Long getLikeCount();
-
- Boolean getIsLike();
-}
diff --git a/backend/src/main/java/hanglog/community/domain/repository/LikeRepository.java b/backend/src/main/java/hanglog/community/domain/repository/LikeRepository.java
deleted file mode 100644
index 4239fa0dc..000000000
--- a/backend/src/main/java/hanglog/community/domain/repository/LikeRepository.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package hanglog.community.domain.repository;
-
-import hanglog.community.domain.Likes;
-import hanglog.community.domain.TripInfo;
-import java.util.List;
-import java.util.Optional;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-public interface LikeRepository extends JpaRepository {
-
- boolean existsByMemberIdAndTripId(final Long memberId, final Long tripId);
-
- void deleteByMemberIdAndTripId(final Long memberId, final Long tripId);
-
- Long countLikesByTripId(final Long tripId);
-
- @Query("""
- SELECT l.tripId,
- COUNT(l.memberId) AS like_count,
- EXISTS(SELECT 1 FROM Likes l_1 WHERE l_1.memberId = :memberId AND l_1.tripId = l.tripId) AS is_like
- FROM Likes l
- WHERE l.tripId in :tripIds
- GROUP BY l.tripId
- """)
- List