Skip to content
This repository was archived by the owner on Jul 3, 2026. It is now read-only.

Commit 0949745

Browse files
authored
Merge pull request #19 from classpick-alpha/feature/group
[v0.2.0] 그룹 생성 및 조회
2 parents 54676dc + 3aefc8a commit 0949745

9 files changed

Lines changed: 105 additions & 9 deletions

File tree

‎src/main/java/com/github/classpick/global/security/jwt/TokenAuthenticationFilter.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
import java.io.IOException;
1717

18+
import static org.springframework.security.core.context.SecurityContextHolder.*;
19+
1820
@RequiredArgsConstructor
1921
public class TokenAuthenticationFilter extends OncePerRequestFilter {
2022

@@ -33,7 +35,7 @@ public void doFilterInternal(
3335
try {
3436
if (accessToken != null && tokenProvider.validateToken(accessToken)) {
3537
Authentication authentication = tokenProvider.getAuthentication(accessToken);
36-
SecurityContextHolder.getContext().setAuthentication(authentication);
38+
getContext().setAuthentication(authentication);
3739
}
3840
} catch (JwtAuthenticationException e) {
3941
handleException(response, e);

‎src/main/java/com/github/classpick/global/security/oauth/OAuth2AuthenticationSuccessHandler.java‎

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.github.classpick.global.property.OauthProperty;
44
import com.github.classpick.global.security.jwt.TokenProvider;
5+
import com.github.classpick.user.repository.GroupEntity;
6+
import com.github.classpick.user.repository.GroupRepository;
57
import com.github.classpick.user.repository.Role;
68
import com.github.classpick.user.repository.UserEntity;
79
import com.github.classpick.user.repository.UserRepository;
@@ -13,6 +15,7 @@
1315
import org.springframework.stereotype.Component;
1416

1517
import java.io.IOException;
18+
import java.util.Optional;
1619

1720
@Component
1821
@RequiredArgsConstructor
@@ -21,6 +24,7 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS
2124
private static final String KOOKMIN_EMAIL_REGEX = ".*@kookmin\\.ac\\.kr$";
2225
private final OauthProperty oauthProperty;
2326
private final UserRepository userRepository;
27+
private final GroupRepository groupRepository;
2428
private final TokenProvider tokenProvider;
2529

2630
@Override
@@ -44,10 +48,27 @@ public void onAuthenticationSuccess(
4448
}
4549

4650
UserEntity user = userRepository.findByEmail(email)
47-
.orElseGet(() -> userRepository.save(UserEntity.builder()
48-
.role(Role.USER)
49-
.email(oauth2User.getEmail())
50-
.build()));
51+
.orElseGet(
52+
() -> {
53+
54+
String emailDomain = email.split("@")[1];
55+
Optional<GroupEntity> savedGroupOptional = groupRepository.findByDomain(emailDomain);
56+
GroupEntity group;
57+
if(savedGroupOptional.isEmpty()){
58+
GroupEntity newGroupEntity = GroupEntity.ofDB(emailDomain);
59+
newGroupEntity = groupRepository.save(newGroupEntity);
60+
group = newGroupEntity;
61+
} else{
62+
group = savedGroupOptional.get();
63+
}
64+
65+
return userRepository.save(UserEntity.builder()
66+
.role(Role.USER)
67+
.email(email)
68+
.group(group)
69+
.build());
70+
}
71+
);
5172

5273
String accessToken = tokenProvider.generateToken(user);
5374

‎src/main/java/com/github/classpick/room/controller/RoomController.java‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.classpick.room.controller;
22

33
import com.github.classpick.global.dto.Response;
4+
import com.github.classpick.global.user.UserGetter;
45
import com.github.classpick.room.controller.dto.request.RoomFilterRequest;
56
import com.github.classpick.room.controller.dto.response.RoomListResponse;
67
import com.github.classpick.room.controller.dto.response.RoomTimeTableResponse;
@@ -23,14 +24,15 @@
2324
public class RoomController {
2425

2526
private final RoomService roomService;
27+
private final UserGetter userGetter;
2628

2729
@Operation(summary = "강의실 목록 조회")
2830
@GetMapping("/v0.0/rooms")
2931
public Response<RoomListResponse> getRooms(
3032
@ModelAttribute @Valid RoomFilterRequest request
3133
) {
32-
33-
return Response.ok(roomService.getRoomList(request));
34+
Long userId = userGetter.getUser().getUserId();
35+
return Response.ok(roomService.getRoomList(request, userId));
3436
}
3537

3638
@Operation(summary = "강의실 타임테이블 조회")

‎src/main/java/com/github/classpick/room/repository/RoomEntity.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.github.classpick.room.repository;
22

33
import com.github.classpick.global.entity.BaseTimeEntity;
4+
import com.github.classpick.user.repository.GroupEntity;
45
import jakarta.annotation.Nullable;
56
import jakarta.persistence.Entity;
7+
import jakarta.persistence.FetchType;
68
import jakarta.persistence.GeneratedValue;
79
import jakarta.persistence.GenerationType;
810
import jakarta.persistence.Id;
11+
import jakarta.persistence.JoinColumn;
12+
import jakarta.persistence.ManyToOne;
913
import jakarta.validation.constraints.NotNull;
1014
import lombok.AccessLevel;
1115
import lombok.AllArgsConstructor;
@@ -40,4 +44,9 @@ public class RoomEntity extends BaseTimeEntity {
4044

4145
@Nullable
4246
private String image;
47+
48+
@NotNull
49+
@ManyToOne(fetch = FetchType.LAZY)
50+
@JoinColumn(name = "group_id")
51+
private GroupEntity group;
4352
}

‎src/main/java/com/github/classpick/room/repository/RoomRepository.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public interface RoomRepository extends JpaRepository<RoomEntity, Long> {
1414
@Query("""
1515
select r
1616
from RoomEntity r
17-
where r.placeName = coalesce(:placeName, r.placeName)
17+
where r.group.groupId = :groupId and r.placeName = coalesce(:placeName, r.placeName)
1818
and (
1919
:capacity is null
2020
or (r.capacity is not null and r.capacity >= :capacity)
@@ -35,6 +35,7 @@ and re.status in ('APPROVED','REQUESTED')
3535
)
3636
""")
3737
List<RoomEntity> findAllWithFilter(
38+
Long groupId,
3839
String placeName,
3940
Integer capacity,
4041
LocalDate date,

‎src/main/java/com/github/classpick/room/service/RoomService.java‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@
1414
import java.time.LocalDate;
1515
import java.util.List;
1616
import java.util.Map;
17+
import java.util.Optional;
1718
import java.util.stream.Collectors;
19+
20+
import com.github.classpick.user.exception.UserException;
21+
import com.github.classpick.user.exception.UserExceptionCode;
22+
import com.github.classpick.user.repository.GroupRepository;
23+
import com.github.classpick.user.repository.UserEntity;
24+
import com.github.classpick.user.repository.UserRepository;
1825
import lombok.RequiredArgsConstructor;
1926
import org.springframework.stereotype.Service;
2027
import org.springframework.transaction.annotation.Transactional;
@@ -25,11 +32,17 @@ public class RoomService {
2532

2633
private final RoomRepository roomRepository;
2734
private final ReservationRepository reservationRepository;
35+
private final UserRepository userRepository;
2836

2937
@Transactional(readOnly = true)
30-
public RoomListResponse getRoomList(RoomFilterRequest dto) {
38+
public RoomListResponse getRoomList(RoomFilterRequest dto, Long userId) {
39+
40+
UserEntity savedUserEntity = userRepository.findById(userId)
41+
.orElseThrow(() -> new UserException(UserExceptionCode.USER_NOT_FOUND));
42+
Long groupId = savedUserEntity.getGroup().getGroupId();
3143

3244
List<RoomResponse> rooms = roomRepository.findAllWithFilter(
45+
groupId,
3346
dto.getPlaceName(),
3447
dto.getCapacity(),
3548
dto.getDate(),
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.github.classpick.user.repository;
2+
3+
import com.github.classpick.global.entity.BaseTimeEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.Id;
7+
import jakarta.validation.constraints.NotNull;
8+
import lombok.AccessLevel;
9+
import lombok.AllArgsConstructor;
10+
import lombok.Builder;
11+
import lombok.Getter;
12+
import lombok.NoArgsConstructor;
13+
14+
@Builder(access = AccessLevel.PRIVATE)
15+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
16+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
17+
@Getter
18+
@Entity
19+
public class GroupEntity extends BaseTimeEntity {
20+
@Id @GeneratedValue(strategy = jakarta.persistence.GenerationType.IDENTITY)
21+
private Long groupId;
22+
23+
@NotNull
24+
private String domain;
25+
26+
public static GroupEntity ofDB(String domain) {
27+
return GroupEntity.builder()
28+
.domain(domain)
29+
.build();
30+
}
31+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.classpick.user.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
import java.util.Optional;
6+
7+
public interface GroupRepository extends JpaRepository<GroupEntity, Long> {
8+
Optional<GroupEntity> findByDomain(String domain);
9+
}

‎src/main/java/com/github/classpick/user/repository/UserEntity.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
import jakarta.persistence.Entity;
66
import jakarta.persistence.EnumType;
77
import jakarta.persistence.Enumerated;
8+
import jakarta.persistence.FetchType;
89
import jakarta.persistence.GeneratedValue;
910
import jakarta.persistence.GenerationType;
1011
import jakarta.persistence.Id;
12+
import jakarta.persistence.JoinColumn;
13+
import jakarta.persistence.ManyToOne;
14+
import jakarta.persistence.OneToMany;
1115
import jakarta.validation.constraints.NotNull;
1216
import lombok.AccessLevel;
1317
import lombok.AllArgsConstructor;
@@ -44,6 +48,10 @@ public class UserEntity extends BaseTimeEntity {
4448
@Nullable
4549
private String phoneNumber;
4650

51+
@ManyToOne(fetch = FetchType.LAZY)
52+
@JoinColumn(name = "group_id")
53+
private GroupEntity group;
54+
4755
@Override
4856
public boolean equals(Object o) {
4957

0 commit comments

Comments
 (0)