Skip to content

Commit 2a5ac66

Browse files
authored
Merge pull request #494 from bounswe/feat/475-add-user-profile-fields-to-register
Feat/475 add user profile fields to register
2 parents 84441f6 + a9213fd commit 2a5ac66

File tree

11 files changed

+68
-0
lines changed

11 files changed

+68
-0
lines changed

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/auth/dto/RegisterRequest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import jakarta.validation.constraints.Email;
44
import jakarta.validation.constraints.NotBlank;
5+
import jakarta.validation.constraints.Pattern;
56
import jakarta.validation.constraints.Size;
67
import lombok.AllArgsConstructor;
78
import lombok.Data;
@@ -24,4 +25,21 @@ public class RegisterRequest {
2425
@NotBlank
2526
@Size(min = 6, max = 40)
2627
private String password;
28+
29+
@NotBlank
30+
@Size(min = 2, max = 30)
31+
private String firstName;
32+
33+
@NotBlank
34+
@Size(min = 2, max = 30)
35+
private String lastName;
36+
37+
@Pattern(
38+
regexp = "^(?i)(HE_HIM|SHE_HER|THEY_THEM|SHE_THEY|HE_THEY|OTHER|NONE)$",
39+
message = "Invalid pronoun set"
40+
)
41+
private String pronounSet;
42+
43+
@Size(max = 250)
44+
private String bio;
2745
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.bounswe.jobboardbackend.auth.model;
2+
3+
4+
public enum PronounSet {
5+
HE_HIM,
6+
SHE_HER,
7+
THEY_THEM,
8+
SHE_THEY,
9+
HE_THEY,
10+
OTHER,
11+
NONE, // for people who don’t want to specify
12+
}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/auth/service/AuthService.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.bounswe.jobboardbackend.auth.security.JwtUtils;
1515
import org.bounswe.jobboardbackend.exception.ErrorCode;
1616
import org.bounswe.jobboardbackend.exception.HandleException;
17+
import org.bounswe.jobboardbackend.profile.model.Profile;
18+
import org.bounswe.jobboardbackend.profile.repository.ProfileRepository;
1719
import org.springframework.beans.factory.annotation.Value;
1820
import org.springframework.security.authentication.AuthenticationManager;
1921
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -45,6 +47,7 @@ public class AuthService {
4547
private final OtpService otpService;
4648
private final OtpRepository otpRepository;
4749
private final UserDetailsServiceImpl userDetailsService;
50+
private final ProfileRepository profileRepository;
4851

4952

5053

@@ -141,6 +144,19 @@ public MessageResponse registerAndSendVerification(@Valid RegisterRequest regist
141144
newUser.setRole(role);
142145
newUser.setEmailVerified(!appEnv.equals("prod"));
143146
userRepository.save(newUser);
147+
148+
Profile profile = Profile.builder()
149+
.user(newUser)
150+
.firstName(registerRequest.getFirstName())
151+
.lastName(registerRequest.getLastName())
152+
.bio(registerRequest.getBio())
153+
.pronounSet(PronounSet.valueOf(registerRequest.getPronounSet().toUpperCase()))
154+
.imageUrl(null)
155+
.build();
156+
157+
profileRepository.save(profile);
158+
159+
144160
if (appEnv.equals("prod")) {
145161
sendEmailForRegister(newUser);
146162
}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/dto/CreateProfileRequestDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bounswe.jobboardbackend.profile.dto;
22

33
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.Pattern;
45
import lombok.*;
56

67
@Data
@@ -15,4 +16,7 @@ public class CreateProfileRequestDto {
1516
private String lastName;
1617

1718
private String bio; // optional
19+
20+
@Pattern(regexp = "^(?i)(MALE|FEMALE|OTHER)$")
21+
private String pronounSet;
1822
}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/dto/ProfileResponseDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class ProfileResponseDto {
1515
private String firstName;
1616
private String lastName;
1717
private String bio;
18+
private String pronounSet;
1819
private String imageUrl;
1920

2021
private List<EducationResponseDto> educations;

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/dto/PublicProfileResponseDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class PublicProfileResponseDto {
1212
private String firstName;
1313
private String lastName;
1414
private String bio;
15+
private String pronounSet;
1516
private String imageUrl;
1617

1718
private List<EducationResponseDto> educations;

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/dto/UpdateProfileRequestDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ public class UpdateProfileRequestDto {
1010
private String firstName; // optional (partial update)
1111
private String lastName; // optional
1212
private String bio; // optional
13+
private String pronounSet;
1314
}

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/model/Profile.java

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

33
import jakarta.persistence.*;
44
import lombok.*;
5+
import org.bounswe.jobboardbackend.auth.model.PronounSet;
56
import org.bounswe.jobboardbackend.auth.model.User;
67
import org.hibernate.annotations.CreationTimestamp;
78
import org.hibernate.annotations.UpdateTimestamp;
@@ -39,6 +40,9 @@ public class Profile {
3940
@Column(length = 1024)
4041
private String imageUrl;
4142

43+
@Enumerated(EnumType.STRING)
44+
private PronounSet pronounSet;
45+
4246
@OneToMany(mappedBy = "profile", cascade = CascadeType.ALL, orphanRemoval = true)
4347
@Builder.Default
4448
private List<Education> educations = new ArrayList<>();

apps/jobboard-backend/src/main/java/org/bounswe/jobboardbackend/profile/service/ProfileService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bounswe.jobboardbackend.profile.service;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.bounswe.jobboardbackend.auth.model.PronounSet;
45
import org.bounswe.jobboardbackend.auth.model.User;
56
import org.bounswe.jobboardbackend.auth.repository.UserRepository;
67
import org.bounswe.jobboardbackend.exception.ErrorCode;
@@ -90,6 +91,7 @@ public ProfileResponseDto createProfile(Long userId, CreateProfileRequestDto dto
9091
.firstName(dto.getFirstName())
9192
.lastName(dto.getLastName())
9293
.bio(dto.getBio())
94+
.pronounSet(PronounSet.valueOf(dto.getPronounSet().toUpperCase()))
9395
.imageUrl(null)
9496
.build();
9597

@@ -120,6 +122,7 @@ public ProfileResponseDto updateProfile(Long userId, UpdateProfileRequestDto dto
120122
if (dto.getFirstName() != null) profile.setFirstName(dto.getFirstName());
121123
if (dto.getLastName() != null) profile.setLastName(dto.getLastName());
122124
if (dto.getBio() != null) profile.setBio(dto.getBio());
125+
if (dto.getPronounSet() != null) profile.setPronounSet(PronounSet.valueOf(dto.getPronounSet().toUpperCase()));
123126

124127
return toProfileDto(profile);
125128
}
@@ -134,6 +137,7 @@ public PublicProfileResponseDto getPublicProfile(Long userId) {
134137
.firstName(p.getFirstName())
135138
.lastName(p.getLastName())
136139
.bio(p.getBio())
140+
.pronounSet(String.valueOf(p.getPronounSet()))
137141
.imageUrl(p.getImageUrl())
138142
.educations(p.getEducations().stream().map(this::toEducationDto).collect(Collectors.toList()))
139143
.experiences(p.getExperiences().stream().map(this::toExperienceDto).collect(Collectors.toList()))
@@ -502,6 +506,7 @@ private ProfileResponseDto toProfileDto(Profile p) {
502506
.firstName(p.getFirstName())
503507
.lastName(p.getLastName())
504508
.bio(p.getBio())
509+
.pronounSet(String.valueOf(p.getPronounSet()))
505510
.imageUrl(p.getImageUrl())
506511
.educations(p.getEducations().stream().map(this::toEducationDto).collect(java.util.stream.Collectors.toList()))
507512
.experiences(p.getExperiences().stream().map(this::toExperienceDto).collect(java.util.stream.Collectors.toList()))

apps/jobboard-backend/src/test/java/org/bounswe/jobboardbackend/profile/repository/ProfileRepositoryTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.bounswe.jobboardbackend.profile.repository;
22

3+
import org.bounswe.jobboardbackend.auth.model.PronounSet;
34
import org.bounswe.jobboardbackend.auth.model.Role;
45
import org.bounswe.jobboardbackend.auth.model.User;
56
import org.bounswe.jobboardbackend.auth.repository.UserRepository;
@@ -36,6 +37,7 @@ void findByUserId_whenProfileExists_returnsProfile() {
3637
.firstName("John")
3738
.lastName("Doe")
3839
.bio("Test bio")
40+
.pronounSet(PronounSet.HE_THEY)
3941
.build();
4042
profileRepository.save(profile);
4143

0 commit comments

Comments
 (0)