Skip to content

Commit cec5645

Browse files
Konstantin PankratovKonstantin Pankratov
authored andcommitted
Add datamodels for chapters
1 parent 7d0ef4a commit cec5645

20 files changed

+264
-25
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.studybuddies.server.domain;
2+
3+
import jakarta.persistence.CascadeType;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.JoinColumn;
9+
import jakarta.persistence.ManyToOne;
10+
import jakarta.persistence.OneToMany;
11+
import java.util.List;
12+
import java.util.UUID;
13+
import lombok.Getter;
14+
import lombok.RequiredArgsConstructor;
15+
import lombok.Setter;
16+
17+
@Entity
18+
@Setter
19+
@Getter
20+
@RequiredArgsConstructor
21+
public class ChapterEntity {
22+
23+
@Id
24+
@GeneratedValue(strategy = GenerationType.UUID)
25+
private UUID id;
26+
private String title;
27+
28+
@OneToMany(mappedBy = "chapter", cascade = CascadeType.ALL, orphanRemoval = true)
29+
private List<CheckboxEntity> checkbox;
30+
31+
@ManyToOne
32+
@JoinColumn(name = "module_id")
33+
private UserModule module;
34+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.studybuddies.server.domain;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.GenerationType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.ManyToOne;
9+
import jakarta.validation.constraints.NotBlank;
10+
import java.util.UUID;
11+
import lombok.Data;
12+
import lombok.RequiredArgsConstructor;
13+
import lombok.Setter;
14+
15+
@RequiredArgsConstructor
16+
@Entity
17+
@Data
18+
@Setter
19+
public class CheckboxEntity {
20+
21+
@Id
22+
@GeneratedValue(strategy = GenerationType.UUID)
23+
private UUID id;
24+
@NotBlank
25+
private String title;
26+
private boolean checked;
27+
28+
@ManyToOne
29+
@JoinColumn(name = "chapter_id")
30+
private ChapterEntity chapter;
31+
}

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package com.studybuddies.server.domain;
22

3-
import jakarta.persistence.CollectionTable;
3+
import jakarta.persistence.CascadeType;
44
import jakarta.persistence.Column;
5-
import jakarta.persistence.ElementCollection;
65
import jakarta.persistence.Entity;
76
import jakarta.persistence.Id;
8-
import jakarta.persistence.JoinColumn;
7+
import jakarta.persistence.OneToMany;
98
import java.util.List;
109
import java.util.UUID;
1110
import lombok.Getter;
@@ -24,8 +23,6 @@ public class UserEntity {
2423
@Column(unique = true, nullable = false)
2524
String username;
2625

27-
@ElementCollection
28-
@CollectionTable(name = "userModules", joinColumns = @JoinColumn(name = "userUuid"))
29-
@Column(name = "moduleName")
30-
private List<String> modules;
26+
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
27+
private List<UserModule> modules;
3128
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.studybuddies.server.domain;
2+
3+
import jakarta.persistence.CascadeType;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.ManyToOne;
9+
import jakarta.persistence.OneToMany;
10+
import java.util.List;
11+
import lombok.Getter;
12+
import lombok.NoArgsConstructor;
13+
import lombok.Setter;
14+
15+
@Entity
16+
@Getter
17+
@Setter
18+
@NoArgsConstructor
19+
public class UserModule {
20+
21+
@Id
22+
@GeneratedValue
23+
private Long id;
24+
25+
private String name;
26+
private String examDate;
27+
private String examLoc;
28+
29+
@OneToMany(mappedBy = "module", cascade = CascadeType.ALL, orphanRemoval = true)
30+
private List<ChapterEntity> chapter;
31+
32+
@ManyToOne
33+
@JoinColumn(name = "user_uuid")
34+
private UserEntity user;
35+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.studybuddies.server.persistance;
2+
3+
import com.studybuddies.server.domain.ChapterEntity;
4+
import java.util.UUID;
5+
import org.springframework.data.repository.CrudRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface ChapterRepository extends CrudRepository<ChapterEntity, UUID> {
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.studybuddies.server.persistance;
2+
3+
import com.studybuddies.server.domain.CheckboxEntity;
4+
import java.util.UUID;
5+
import org.springframework.data.repository.CrudRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface CheckboxRepository extends CrudRepository<CheckboxEntity, UUID> {
10+
}

server/src/main/java/com/studybuddies/server/services/StudyGroupService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public void create(StudyGroupJoinRequest request, String clientUuid) {
5959

6060
@Override
6161
public void delete(String targetUUID, String clientUUID) {
62-
// Restricted through the CRUD Interface :/
6362
leaveMeeting(clientUUID, targetUUID);
6463
leaveSuperMeeting(clientUUID, targetUUID);
6564
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.studybuddies.server.services.chapter;
2+
3+
import com.studybuddies.server.services.interfaces.CRUDService;
4+
import com.studybuddies.server.web.dto.chapter.ChapterCreationRequest;
5+
import com.studybuddies.server.web.dto.interfaces.ChangeRequest;
6+
import com.studybuddies.server.web.dto.interfaces.Responses;
7+
import org.springframework.stereotype.Service;
8+
9+
@Service
10+
public class ChapterCrudService implements CRUDService<ChapterCreationRequest, ChangeRequest, Responses> {
11+
12+
}

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

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
package com.studybuddies.server.services.user;
22

3+
import com.studybuddies.server.domain.ChapterEntity;
4+
import com.studybuddies.server.domain.CheckboxEntity;
35
import com.studybuddies.server.domain.Filter;
46
import com.studybuddies.server.domain.UserEntity;
7+
import com.studybuddies.server.domain.UserModule;
58
import com.studybuddies.server.persistance.UserRepository;
69
import com.studybuddies.server.services.UUIDService;
710
import com.studybuddies.server.services.exceptions.UserAccountSetupNotFinished;
811
import com.studybuddies.server.services.exceptions.UsernameAlreadyTakenException;
912
import com.studybuddies.server.services.interfaces.CRUDService;
1013
import com.studybuddies.server.services.module.ModuleValidationService;
1114
import com.studybuddies.server.web.dto.user.AccountChangeRequest;
12-
import com.studybuddies.server.web.dto.user.ModuleUpdateRequest;
1315
import com.studybuddies.server.web.dto.user.UserAccountSetupRequest;
16+
import com.studybuddies.server.web.dto.user.UserModuleReq;
1417
import com.studybuddies.server.web.dto.user.UserResponse;
1518
import com.studybuddies.server.web.mapper.UserMapper;
19+
import com.studybuddies.server.web.mapper.UserModuleMapper;
1620
import com.studybuddies.server.web.mapper.exceptions.AccountSetupAlreadyFinished;
1721
import jakarta.transaction.Transactional;
1822
import java.util.ArrayList;
@@ -31,6 +35,7 @@ public class UserService implements
3135

3236
private final UserRepository userRepository;
3337
private final UserMapper userMapper;
38+
private final UserModuleMapper userModuleMapper;
3439
private final ModuleValidationService moduleValidationService;
3540

3641
@Override
@@ -87,9 +92,9 @@ public boolean existsByUUID(UUID uuid) {
8792
}
8893

8994
@Transactional
90-
public void updateModules(List<ModuleUpdateRequest> moduleUpdateRequest, String uuid) {
95+
public void Old_updateModules(List<UserModuleReq> moduleUpdateRequest, String uuid) {
9196
var foundModules = moduleUpdateRequest.stream()
92-
.map(ModuleUpdateRequest::getName)
97+
.map(UserModuleReq::getName)
9398
.filter(moduleValidationService::exists)
9499
.map(String::toUpperCase)
95100
.collect(Collectors.toCollection(ArrayList::new));
@@ -98,7 +103,34 @@ public void updateModules(List<ModuleUpdateRequest> moduleUpdateRequest, String
98103
if (target.isEmpty()) {
99104
throw new UserAccountSetupNotFinished("User not found");
100105
}
101-
target.get().setModules(foundModules);
106+
//target.get().setModules(foundModules);
102107
userRepository.save(target.get());
103108
}
109+
110+
@Transactional
111+
public void updateModules(List<UserModuleReq> moduleUpdateRequest, String uuidStr) {
112+
UUID uuid = UUID.fromString(uuidStr);
113+
UserEntity user = userRepository.findById(uuid)
114+
.orElseThrow(() -> new UserAccountSetupNotFinished("User not found"));
115+
116+
user.getModules().clear();
117+
118+
for (UserModuleReq req : moduleUpdateRequest) {
119+
if (!moduleValidationService.exists(req.getName())) continue;
120+
121+
UserModule module = userModuleMapper.of(req);
122+
module.setUser(user);
123+
124+
for (ChapterEntity chapter : module.getChapter()) {
125+
chapter.setModule(module);
126+
for (CheckboxEntity cb : chapter.getCheckbox()) {
127+
cb.setChapter(chapter);
128+
}
129+
}
130+
131+
user.getModules().add(module);
132+
}
133+
134+
userRepository.save(user);
135+
}
104136
}

server/src/main/java/com/studybuddies/server/web/UserController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.studybuddies.server.web;
22

33
import com.studybuddies.server.services.user.UserService;
4-
import com.studybuddies.server.web.dto.user.ModuleUpdateRequest;
54
import com.studybuddies.server.web.dto.user.UserAccountSetupRequest;
5+
import com.studybuddies.server.web.dto.user.UserModuleReq;
66
import com.studybuddies.server.web.dto.user.UserResponse;
77
import jakarta.servlet.http.HttpServletRequest;
88
import java.util.List;
@@ -16,7 +16,7 @@
1616
@RequestMapping("/user")
1717
public class UserController {
1818

19-
UserService userService;
19+
private UserService userService;
2020

2121
@GetMapping
2222
public List<UserResponse> get(HttpServletRequest request) {
@@ -41,7 +41,7 @@ public ResponseEntity<?> delete(HttpServletRequest request,
4141
}
4242

4343
@PutMapping
44-
public ResponseEntity<?> put(HttpServletRequest request, @RequestBody List<ModuleUpdateRequest> updateRequest) {
44+
public ResponseEntity<?> put(HttpServletRequest request, @RequestBody List<UserModuleReq> updateRequest) {
4545
String userUUID = request.getUserPrincipal().getName();
4646
userService.updateModules(updateRequest, userUUID);
4747
return new ResponseEntity<>(userUUID, HttpStatus.OK);

0 commit comments

Comments
 (0)