Skip to content

Commit d77d865

Browse files
authored
Merge pull request #9 from eunhye-ahn/update/group-detail-response
[UPDATE] 그룹 상세 응답: 이미지 및 멤버 수 필드 추가
2 parents 21ee51c + 9f47a1c commit d77d865

File tree

5 files changed

+83
-7
lines changed

5 files changed

+83
-7
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React, { Component } from "react";
2+
import { ACCESS_TOKEN } from '../../constants';
3+
import "./MyGroups.css";
4+
import { getMyGroups } from '../../util/APIUtils';
5+
6+
class MyGroups extends Component {
7+
constructor(props) {
8+
super(props);
9+
this.state = {
10+
groups: [],
11+
loading: true,
12+
error: null,
13+
};
14+
}
15+
16+
componentDidMount() {
17+
const token = localStorage.getItem(ACCESS_TOKEN);
18+
19+
getMyGroups()
20+
.then((data) => {
21+
this.setState({ groups: data, loading: false });
22+
})
23+
.catch((error) => {
24+
this.setState({ error: error.message || "에러 발생", loading: false });
25+
});
26+
}
27+
28+
render() {
29+
const { groups, loading, error } = this.state;
30+
31+
return (
32+
<div className="my-groups-container">
33+
<h3>참여 중인 그룹</h3>
34+
{loading ? (
35+
<p>로딩 중...</p>
36+
) : error ? (
37+
<p className="error">{error}</p>
38+
) : groups.length === 0 ? (
39+
<p>참여한 그룹이 없습니다.</p>
40+
) : (
41+
<div className="group-card-list">
42+
{groups.map((group) => (
43+
<div key={group.id} className="group-card">
44+
<div className="group-avatar" />
45+
<div className="group-info">
46+
<div className="group-name">{group.name}</div>
47+
<div className="group-count">멤버 {group.memberCount}</div>
48+
</div>
49+
</div>
50+
))}
51+
</div>
52+
)}
53+
</div>
54+
);
55+
}
56+
}
57+
58+
export default MyGroups;

polling-app-client/src/util/APIUtils.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,11 @@ export function getUserVotedPolls(username, page, size) {
116116
url: API_BASE_URL + "/users/" + username + "/votes?page=" + page + "&size=" + size,
117117
method: 'GET'
118118
});
119+
}
120+
121+
export function getMyGroups() {
122+
return request({
123+
url: API_BASE_URL + "/groups/my",
124+
method: 'GET'
125+
});
119126
}

polling-app-server/src/main/java/com/example/polls/payload/Response/GroupSummaryResponse.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,23 @@ public class GroupSummaryResponse {
99
private String name;
1010
private String imageUrl;
1111
private String joinCode;
12+
private int memberCount;
1213

1314
public GroupSummaryResponse(Group group) {
1415
this.id = group.getId();
1516
this.name = group.getName();
1617
this.joinCode = group.getJoinCode();
1718
this.imageUrl = group.getImageUrl();
19+
this.memberCount = group.getMembers().size();
20+
21+
}
22+
23+
public int getMemberCount() {
24+
return memberCount;
25+
}
26+
27+
public void setMemberCount(int memberCount) {
28+
this.memberCount = memberCount;
1829
}
1930

2031
public Long getId() {

polling-app-server/src/main/java/com/example/polls/service/GroupService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,23 @@ public class GroupService {
2828
private final GroupRepository groupRepository;
2929
private final UserRepository userRepository;
3030
private final GroupMemberRepository groupMemberRepository;
31+
private static final String DEFAULT_GROUP_IMAGE_URL = "https://icons8.com/icon/DqsRVHkElCJ5/user-group";
3132

3233
@Transactional
3334
public GroupSummaryResponse createGroup(CreateGroupRequest request,
3435
User creator) {
3536
//참여 코드 생성
3637
String joinCode = generateUniqueJoinCode();
3738

39+
String imageUrl = (request.getImageUrl() == null || request.getImageUrl().isBlank())
40+
? DEFAULT_GROUP_IMAGE_URL
41+
: request.getImageUrl();
42+
3843
//그룹 엔티티 생성
3944
Group group = new Group();
4045
group.setName(request.getName());
4146
group.setDescription(request.getDescription());
42-
group.setImageUrl(request.getImageUrl());
47+
group.setImageUrl(imageUrl);
4348
group.setJoinCode(joinCode);
4449

4550
//그룹저장

polling-app-server/src/main/resources/application.properties

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
server.port= 8080
33
server.compression.enabled=true
44

5-
#Debug
6-
logging.level.org.springframework.web=DEBUG
7-
logging.level.com.example=DEBUG
8-
9-
105
## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
116
spring.datasource.url= jdbc:mysql://localhost:3306/polling_app?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
127
spring.datasource.username= root
@@ -41,4 +36,4 @@ app.jwtExpirationInMs = 604800000
4136
app.cors.allowedOrigins = http://localhost:3000
4237

4338
## Spring Profiles
44-
# spring.profiles.active=prod
39+
# spring.profiles.active=prod

0 commit comments

Comments
 (0)