Skip to content

Commit b951e80

Browse files
authored
[Release] - 2026/01/27
2026/01/27
2 parents 6720040 + e5804fd commit b951e80

17 files changed

Lines changed: 348 additions & 34 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ jobs:
8181
--name zone2be-app \
8282
--network zone2be_network \
8383
-p 8080:8080 \
84+
-e TZ=Asia/Seoul \
8485
-e SPRING_PROFILES_ACTIVE=prod \
8586
-e DB_URL="${{ secrets.DB_URL }}" \
8687
-e DB_USERNAME="${{ secrets.DB_USERNAME }}" \

src/main/java/com/prography/zone_2_be/Zone2BeApplication.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
6-
6+
import org.springframework.scheduling.annotation.EnableScheduling;
77

88
@SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class)
9+
@EnableScheduling
910
public class Zone2BeApplication {
10-
public static void main(String[] args) {
11-
SpringApplication.run(Zone2BeApplication.class, args);
12-
}
11+
public static void main(String[] args) {
12+
SpringApplication.run(Zone2BeApplication.class, args);
13+
}
1314
}

src/main/java/com/prography/zone_2_be/domain/auth/dto/UserRegisterRequest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@
44
import java.util.List;
55

66
import com.prography.zone_2_be.domain.term.agreement.dto.TermAgreementSaveRequest;
7+
import com.prography.zone_2_be.domain.user.device.dto.request.UserDeviceSaveRequest;
78
import com.prography.zone_2_be.domain.user.entity.Gender;
89

910
import jakarta.validation.Valid;
1011
import jakarta.validation.constraints.NotNull;
1112
import jakarta.validation.constraints.Past;
13+
import lombok.AllArgsConstructor;
1214
import lombok.Getter;
1315

1416
@Getter
17+
@AllArgsConstructor
1518
public class UserRegisterRequest {
1619
@NotNull(message = "registrationId 필수 입력값입니다.")
1720
public String registrationId;
@@ -29,4 +32,7 @@ public class UserRegisterRequest {
2932

3033
@Valid
3134
private List<TermAgreementSaveRequest> termAgreementSaveRequests;
35+
36+
private UserDeviceSaveRequest userDeviceSaveRequest;
37+
3238
}

src/main/java/com/prography/zone_2_be/domain/auth/service/AuthService.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.prography.zone_2_be.domain.auth.repository.AccessTokenRepository;
2828
import com.prography.zone_2_be.domain.auth.repository.RefreshTokenRepository;
2929
import com.prography.zone_2_be.domain.term.agreement.service.TermAgreementService;
30+
import com.prography.zone_2_be.domain.user.device.service.UserDeviceService;
31+
import com.prography.zone_2_be.domain.user.entity.Provider;
3032
import com.prography.zone_2_be.domain.user.entity.User;
3133
import com.prography.zone_2_be.domain.user.exception.UserNotFoundException;
3234
import com.prography.zone_2_be.domain.user.repository.UserRepository;
@@ -44,6 +46,7 @@ public class AuthService {
4446

4547
private final AlarmService alarmService;
4648
private final TermAgreementService termAgreementService;
49+
private final UserDeviceService userDeviceService;
4750

4851
private final UserRepository userRepository;
4952
private final AccessTokenRepository accessTokenRepository;
@@ -65,6 +68,7 @@ private String createRefreshToken(User user) {
6568
public UserAuthResponse register(UserRegisterRequest request, String oauthToken) {
6669
User user = createUser(request, oauthToken);
6770

71+
userDeviceService.save(user, request.getUserDeviceSaveRequest());
6872
alarmService.initializeAlarmByUser(user);
6973

7074
String newAccessToken = createAccessToken(user);
@@ -114,7 +118,7 @@ public User createUser(UserRegisterRequest request, String oauthToken) {
114118
throw new CustomException(ErrorCode.ALREADY_USER_EXISTS);
115119
}
116120

117-
User newUser = User.forRegister(request, oauth2Key);
121+
User newUser = User.forRegister(request, oauth2Key, Provider.from(request.getRegistrationId()));
118122

119123
return userRepository.save(newUser);
120124
}
@@ -160,12 +164,13 @@ public String getOauth2Key(String registrationId, String accessToken) {
160164

161165
ClientRegistration registration =
162166
clientRegistrationRepository.findByRegistrationId(registrationId);
167+
163168
if (registration == null) {
164169
throw new IllegalArgumentException("Unknown OAuth provider: " + registrationId);
165170
}
166171

167172
//TODO: 리팩 토링
168-
if ("apple".equals(registrationId)) {
173+
if (Provider.APPLE.getRegistrationId().equals(registrationId)) {
169174
try {
170175
JWTClaimsSet claims = JWTParser.parse(accessToken).getJWTClaimsSet();
171176
return claims.getSubject();
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.prography.zone_2_be.domain.user.device.dto.request;
2+
3+
import com.prography.zone_2_be.domain.user.device.entity.OsType;
4+
5+
import lombok.AccessLevel;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
@Getter
11+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
12+
@AllArgsConstructor
13+
public class UserDeviceSaveRequest {
14+
15+
private OsType osType;
16+
17+
private String deviceModel;
18+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.prography.zone_2_be.domain.user.device.entity;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum OsType {
9+
ANDROID("android"),
10+
IOS("ios");
11+
12+
private final String value;
13+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.prography.zone_2_be.domain.user.device.entity;
2+
3+
import com.prography.zone_2_be.domain.user.entity.User;
4+
import com.prography.zone_2_be.global.entity.BaseEntity;
5+
6+
import jakarta.persistence.Column;
7+
import jakarta.persistence.ConstraintMode;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.EnumType;
10+
import jakarta.persistence.Enumerated;
11+
import jakarta.persistence.FetchType;
12+
import jakarta.persistence.ForeignKey;
13+
import jakarta.persistence.JoinColumn;
14+
import jakarta.persistence.ManyToOne;
15+
import lombok.AccessLevel;
16+
import lombok.Builder;
17+
import lombok.Getter;
18+
import lombok.NoArgsConstructor;
19+
20+
@Entity
21+
@Getter
22+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
23+
public class UserDevice extends BaseEntity {
24+
25+
@ManyToOne(fetch = FetchType.LAZY)
26+
@JoinColumn(
27+
name = "user_id",
28+
nullable = false,
29+
foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)
30+
)
31+
private User user;
32+
33+
@Enumerated(EnumType.STRING)
34+
@Column(nullable = false, length = 20)
35+
private OsType osType;
36+
37+
@Column(length = 50)
38+
private String deviceModel;
39+
40+
@Builder
41+
private UserDevice(User user, OsType osType, String deviceModel) {
42+
this.user = user;
43+
this.osType = osType;
44+
this.deviceModel = deviceModel;
45+
}
46+
47+
public static UserDevice of(User user, OsType osType, String deviceModel) {
48+
return UserDevice.builder()
49+
.user(user)
50+
.osType(osType)
51+
.deviceModel(deviceModel)
52+
.build();
53+
}
54+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.prography.zone_2_be.domain.user.device.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.stereotype.Repository;
5+
6+
import com.prography.zone_2_be.domain.user.device.entity.UserDevice;
7+
8+
@Repository
9+
public interface UserDeviceRepository extends JpaRepository<UserDevice, Long> {
10+
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.prography.zone_2_be.domain.user.device.service;
2+
3+
import org.springframework.stereotype.Service;
4+
import org.springframework.transaction.annotation.Transactional;
5+
6+
import com.prography.zone_2_be.domain.user.device.dto.request.UserDeviceSaveRequest;
7+
import com.prography.zone_2_be.domain.user.device.entity.UserDevice;
8+
import com.prography.zone_2_be.domain.user.device.repository.UserDeviceRepository;
9+
import com.prography.zone_2_be.domain.user.entity.User;
10+
11+
import lombok.RequiredArgsConstructor;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class UserDeviceService {
16+
17+
private final UserDeviceRepository userDeviceRepository;
18+
19+
@Transactional
20+
public UserDevice save(User user, UserDeviceSaveRequest request) {
21+
22+
UserDevice userDevice = UserDevice.of(user, request.getOsType(), request.getDeviceModel());
23+
24+
return userDeviceRepository.save(userDevice);
25+
}
26+
27+
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package com.prography.zone_2_be.domain.user.entity;
22

3-
public enum Gender {
4-
MALE(0),
5-
FEMALE(1);
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
65

7-
private final int value;
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum Gender {
9+
MALE(0),
10+
FEMALE(1);
811

9-
Gender(int value) {
10-
this.value = value;
11-
}
12+
private final int value;
1213

13-
public int getValue() {
14-
return this.value;
15-
}
1614
}

0 commit comments

Comments
 (0)