Skip to content

Commit d0ab794

Browse files
Konstantin PankratovKonstantin Pankratov
authored andcommitted
Fix domain schema and migrate to postgres
1 parent cec5645 commit d0ab794

File tree

12 files changed

+77
-49
lines changed

12 files changed

+77
-49
lines changed

docker-compose.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@ services:
77
KC_DB_URL: jdbc:postgresql://keycloakdb1:5432/keycloak
88
KC_DB_USERNAME: ${KC_DB_USERNAME}
99
KC_DB_PASSWORD: ${KC_DB_PASSWORD}
10-
1110
KEYCLOAK_ADMIN: ${KC_DB_USERNAME}
1211
KEYCLOAK_ADMIN_PASSWORD: pass
13-
14-
1512
KC_HOSTNAME: localhost
1613
KC_HOSTNAME_PORT: 8080
1714
KC_HOSTNAME_STRICT: 'false'
1815
KC_HOSTNAME_STRICT_HTTPS: 'false'
1916
KC_LOG_LEVEL: debug
20-
2117
KC_METRICS_ENABLED: 'true'
2218
KC_HEALTH_ENABLED: 'true'
2319
KC_PROXY: edge
@@ -38,6 +34,21 @@ services:
3834
POSTGRES_PASSWORD: ${KC_DB_PASSWORD}
3935
ports:
4036
- '5432:5432'
37+
######################################################
38+
# Spring Boot App PostgreSQL Database
39+
app_postgres:
40+
image: postgres:15-alpine
41+
container_name: app-postgres-db
42+
restart: unless-stopped
43+
ports:
44+
- "6543:5432"
45+
environment:
46+
POSTGRES_DB: myapp_db
47+
POSTGRES_USER: myapp_user
48+
POSTGRES_PASSWORD: myapp_password
49+
volumes:
50+
- app_postgres_data:/var/lib/postgresql/data
4151
######################################################
4252
volumes:
4353
postgres_data:
54+
app_postgres_data:

server/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@
118118
<version>6.4.2</version>
119119
</dependency>
120120

121+
<dependency>
122+
<groupId>org.postgresql</groupId>
123+
<artifactId>postgresql</artifactId>
124+
<scope>runtime</scope>
125+
</dependency>
126+
121127
<dependency>
122128
<groupId>org.springframework.boot</groupId>
123129
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>

server/src/main/java/com/studybuddies/server/domain/ChapterEntity.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import jakarta.persistence.JoinColumn;
99
import jakarta.persistence.ManyToOne;
1010
import jakarta.persistence.OneToMany;
11+
import java.util.ArrayList;
1112
import java.util.List;
12-
import java.util.UUID;
1313
import lombok.Getter;
1414
import lombok.RequiredArgsConstructor;
1515
import lombok.Setter;
@@ -21,12 +21,12 @@
2121
public class ChapterEntity {
2222

2323
@Id
24-
@GeneratedValue(strategy = GenerationType.UUID)
25-
private UUID id;
24+
@GeneratedValue(strategy = GenerationType.IDENTITY)
25+
private Long id;
2626
private String title;
2727

2828
@OneToMany(mappedBy = "chapter", cascade = CascadeType.ALL, orphanRemoval = true)
29-
private List<CheckboxEntity> checkbox;
29+
private List<CheckboxEntity> checkbox = new ArrayList<>();
3030

3131
@ManyToOne
3232
@JoinColumn(name = "module_id")

server/src/main/java/com/studybuddies/server/domain/CheckboxEntity.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import jakarta.persistence.JoinColumn;
88
import jakarta.persistence.ManyToOne;
99
import jakarta.validation.constraints.NotBlank;
10-
import java.util.UUID;
1110
import lombok.Data;
1211
import lombok.RequiredArgsConstructor;
1312
import lombok.Setter;
@@ -19,8 +18,8 @@
1918
public class CheckboxEntity {
2019

2120
@Id
22-
@GeneratedValue(strategy = GenerationType.UUID)
23-
private UUID id;
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
private Long id;
2423
@NotBlank
2524
private String title;
2625
private boolean checked;

server/src/main/java/com/studybuddies/server/domain/UserEntity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import jakarta.persistence.Entity;
66
import jakarta.persistence.Id;
77
import jakarta.persistence.OneToMany;
8+
import java.util.ArrayList;
89
import java.util.List;
910
import java.util.UUID;
1011
import lombok.Getter;
@@ -24,5 +25,5 @@ public class UserEntity {
2425
String username;
2526

2627
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
27-
private List<UserModule> modules;
28+
private List<UserModule> modules = new ArrayList<>();
2829
}

server/src/main/java/com/studybuddies/server/domain/UserModule.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.studybuddies.server.domain;
22

33
import jakarta.persistence.CascadeType;
4+
import jakarta.persistence.Column;
45
import jakarta.persistence.Entity;
56
import jakarta.persistence.GeneratedValue;
7+
import jakarta.persistence.GenerationType;
68
import jakarta.persistence.Id;
79
import jakarta.persistence.JoinColumn;
810
import jakarta.persistence.ManyToOne;
911
import jakarta.persistence.OneToMany;
12+
import java.util.ArrayList;
1013
import java.util.List;
1114
import lombok.Getter;
1215
import lombok.NoArgsConstructor;
@@ -19,15 +22,16 @@
1922
public class UserModule {
2023

2124
@Id
22-
@GeneratedValue
25+
@GeneratedValue(strategy = GenerationType.IDENTITY)
26+
@Column(nullable = false, updatable = false)
2327
private Long id;
2428

2529
private String name;
2630
private String examDate;
2731
private String examLoc;
2832

2933
@OneToMany(mappedBy = "module", cascade = CascadeType.ALL, orphanRemoval = true)
30-
private List<ChapterEntity> chapter;
34+
private List<ChapterEntity> chapter = new ArrayList<>();
3135

3236
@ManyToOne
3337
@JoinColumn(name = "user_uuid")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.studybuddies.server.persistance;
2+
3+
import com.studybuddies.server.domain.UserModule;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface UserModuleRepository extends JpaRepository<UserModule, Long> {
7+
8+
}

server/src/main/java/com/studybuddies/server/services/user/UserService.java

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import com.studybuddies.server.domain.Filter;
66
import com.studybuddies.server.domain.UserEntity;
77
import com.studybuddies.server.domain.UserModule;
8+
import com.studybuddies.server.persistance.UserModuleRepository;
89
import com.studybuddies.server.persistance.UserRepository;
910
import com.studybuddies.server.services.UUIDService;
11+
import com.studybuddies.server.services.exceptions.ModuleNotFoundException;
1012
import com.studybuddies.server.services.exceptions.UserAccountSetupNotFinished;
1113
import com.studybuddies.server.services.exceptions.UsernameAlreadyTakenException;
1214
import com.studybuddies.server.services.interfaces.CRUDService;
@@ -19,11 +21,10 @@
1921
import com.studybuddies.server.web.mapper.UserModuleMapper;
2022
import com.studybuddies.server.web.mapper.exceptions.AccountSetupAlreadyFinished;
2123
import jakarta.transaction.Transactional;
22-
import java.util.ArrayList;
2324
import java.util.List;
2425
import java.util.Optional;
26+
import java.util.Random;
2527
import java.util.UUID;
26-
import java.util.stream.Collectors;
2728
import lombok.AllArgsConstructor;
2829
import org.apache.commons.lang3.NotImplementedException;
2930
import org.springframework.stereotype.Service;
@@ -37,6 +38,7 @@ public class UserService implements
3738
private final UserMapper userMapper;
3839
private final UserModuleMapper userModuleMapper;
3940
private final ModuleValidationService moduleValidationService;
41+
private final UserModuleRepository userModuleRepository;
4042

4143
@Override
4244
public List<UserResponse> get(String userUUID, Filter filter) {
@@ -91,22 +93,6 @@ public boolean existsByUUID(UUID uuid) {
9193
return userRepository.existsById(uuid);
9294
}
9395

94-
@Transactional
95-
public void Old_updateModules(List<UserModuleReq> moduleUpdateRequest, String uuid) {
96-
var foundModules = moduleUpdateRequest.stream()
97-
.map(UserModuleReq::getName)
98-
.filter(moduleValidationService::exists)
99-
.map(String::toUpperCase)
100-
.collect(Collectors.toCollection(ArrayList::new));
101-
102-
Optional<UserEntity> target = userRepository.findById(UUIDService.parseUUID(uuid));
103-
if (target.isEmpty()) {
104-
throw new UserAccountSetupNotFinished("User not found");
105-
}
106-
//target.get().setModules(foundModules);
107-
userRepository.save(target.get());
108-
}
109-
11096
@Transactional
11197
public void updateModules(List<UserModuleReq> moduleUpdateRequest, String uuidStr) {
11298
UUID uuid = UUID.fromString(uuidStr);
@@ -116,21 +102,27 @@ public void updateModules(List<UserModuleReq> moduleUpdateRequest, String uuidSt
116102
user.getModules().clear();
117103

118104
for (UserModuleReq req : moduleUpdateRequest) {
119-
if (!moduleValidationService.exists(req.getName())) continue;
105+
if (!moduleValidationService.exists(req.getName())) throw new ModuleNotFoundException("");
120106

121107
UserModule module = userModuleMapper.of(req);
122108
module.setUser(user);
123109

124-
for (ChapterEntity chapter : module.getChapter()) {
125-
chapter.setModule(module);
126-
for (CheckboxEntity cb : chapter.getCheckbox()) {
127-
cb.setChapter(chapter);
110+
if (module.getChapter() != null) {
111+
for (ChapterEntity chapter : module.getChapter()) {
112+
module.setName(module.getName().toUpperCase());
113+
chapter.setModule(module);
114+
115+
if (chapter.getCheckbox() != null) {
116+
for (CheckboxEntity cb : chapter.getCheckbox()) {
117+
cb.setChapter(chapter);
118+
}
119+
}
128120
}
129121
}
130122

131123
user.getModules().add(module);
124+
userModuleRepository.save(module);
132125
}
133-
134126
userRepository.save(user);
135127
}
136128
}

server/src/main/java/com/studybuddies/server/web/dto/chapter/ChapterCreationRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.studybuddies.server.web.dto.chapter;
22

33
import com.studybuddies.server.web.dto.interfaces.CreationRequest;
4+
import lombok.Getter;
45

6+
@Getter
57
public class ChapterCreationRequest implements CreationRequest {
68
private String title;
79
private CheckboxCreationRequest[] checkbox;

server/src/main/java/com/studybuddies/server/web/mapper/ChapterMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88
@Mapper(componentModel = "spring", uses = {CheckboxMapper.class})
99
public interface ChapterMapper {
10-
1110
@Mapping(target = "id", ignore = true)
1211
@Mapping(target = "module", ignore = true)
12+
@Mapping(target = "checkbox", source = "checkbox")
1313
ChapterEntity of(ChapterCreationRequest dto);
1414
}
15+

0 commit comments

Comments
 (0)