diff --git a/src/main/java/org/mmga/clubs/controller/ClubController.java b/src/main/java/org/mmga/clubs/controller/ClubController.java new file mode 100644 index 0000000..f71cb68 --- /dev/null +++ b/src/main/java/org/mmga/clubs/controller/ClubController.java @@ -0,0 +1,26 @@ +package org.mmga.clubs.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import org.mmga.clubs.entities.BaseResponse; +import org.mmga.clubs.entities.club.ClubInformation; +import org.mmga.clubs.service.ClubService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/club") +@Tag(name = "社团", description = "社团相关接口") +public class ClubController { + private final ClubService clubService; + @Autowired + public ClubController(ClubService clubService) { + this.clubService = clubService; + } + @GetMapping("/") + public BaseResponse getClub(@RequestParam("id") int clubId){ + return clubService.getClubInformationById(clubId); + } +} diff --git a/src/main/java/org/mmga/clubs/dao/ClubUserAuthDao.java b/src/main/java/org/mmga/clubs/dao/ClubUserAuthDao.java index 806146a..344fab5 100644 --- a/src/main/java/org/mmga/clubs/dao/ClubUserAuthDao.java +++ b/src/main/java/org/mmga/clubs/dao/ClubUserAuthDao.java @@ -3,7 +3,10 @@ package org.mmga.clubs.dao; import org.apache.ibatis.annotations.Mapper; import org.mmga.clubs.entities.ClubUserAuthVo; +import java.util.List; + @Mapper public interface ClubUserAuthDao { ClubUserAuthVo getClubUserAuthVoByUserId(int userId); + List getUsersByClubId(int clubId); } diff --git a/src/main/java/org/mmga/clubs/dao/UserDao.java b/src/main/java/org/mmga/clubs/dao/UserDao.java index 92b3352..22a42bc 100644 --- a/src/main/java/org/mmga/clubs/dao/UserDao.java +++ b/src/main/java/org/mmga/clubs/dao/UserDao.java @@ -2,6 +2,7 @@ package org.mmga.clubs.dao; import org.apache.ibatis.annotations.Mapper; import org.mmga.clubs.entities.user.UserRegResponseVo; +import org.mmga.clubs.entities.user.UserSimpleInformation; import org.mmga.clubs.entities.user.UserVo; import java.util.List; @@ -20,4 +21,6 @@ public interface UserDao { void changePasswordAdmin(int id, String password); void changeAuth(int id, int authId); void changeAvatar(int id, String sha); + + UserSimpleInformation getUserSimpleInformation(int userId); } diff --git a/src/main/java/org/mmga/clubs/entities/club/ClubInformation.java b/src/main/java/org/mmga/clubs/entities/club/ClubInformation.java new file mode 100644 index 0000000..3f0b05a --- /dev/null +++ b/src/main/java/org/mmga/clubs/entities/club/ClubInformation.java @@ -0,0 +1,20 @@ +package org.mmga.clubs.entities.club; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.mmga.clubs.entities.user.ClubUserSimpleInformation; + +import java.util.List; + +@Data +@Schema(description = "社团详细详细") +public class ClubInformation { + @Schema(description = "社团ID") + private int id; + @Schema(description = "社团名称") + private String name; + @Schema(description = "社团简介") + private String commit; + @Schema(description = "社团用户信息") + private List users; +} diff --git a/src/main/java/org/mmga/clubs/entities/user/ClubUserSimpleInformation.java b/src/main/java/org/mmga/clubs/entities/user/ClubUserSimpleInformation.java new file mode 100644 index 0000000..d64b875 --- /dev/null +++ b/src/main/java/org/mmga/clubs/entities/user/ClubUserSimpleInformation.java @@ -0,0 +1,15 @@ +package org.mmga.clubs.entities.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(description = "社团用户简单信息") +public class ClubUserSimpleInformation extends UserSimpleInformation{ + @Schema(description = "社团ID") + private int clubId; + @Schema(description = "社团职务名称") + private String clubAuthName; +} diff --git a/src/main/java/org/mmga/clubs/entities/user/UserSimpleInformation.java b/src/main/java/org/mmga/clubs/entities/user/UserSimpleInformation.java new file mode 100644 index 0000000..a534b1a --- /dev/null +++ b/src/main/java/org/mmga/clubs/entities/user/UserSimpleInformation.java @@ -0,0 +1,15 @@ +package org.mmga.clubs.entities.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "用户基础信息") +public class UserSimpleInformation { + @Schema(description = "用户ID") + private int id; + @Schema(description = "用户名") + private String name; + @Schema(description = "用户头像SHA1") + private String avatar; +} diff --git a/src/main/java/org/mmga/clubs/service/ClubService.java b/src/main/java/org/mmga/clubs/service/ClubService.java index 576b21c..ed4d575 100644 --- a/src/main/java/org/mmga/clubs/service/ClubService.java +++ b/src/main/java/org/mmga/clubs/service/ClubService.java @@ -2,23 +2,33 @@ package org.mmga.clubs.service; import org.mmga.clubs.dao.ClubDao; import org.mmga.clubs.dao.ClubUserAuthDao; +import org.mmga.clubs.entities.BaseResponse; import org.mmga.clubs.entities.ClubUserAuthVo; import org.mmga.clubs.entities.auth.Auth; import org.mmga.clubs.entities.club.Club; +import org.mmga.clubs.entities.club.ClubInformation; import org.mmga.clubs.entities.club.ClubVo; +import org.mmga.clubs.entities.user.ClubUserSimpleInformation; +import org.mmga.clubs.entities.user.UserSimpleInformation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class ClubService { private final ClubUserAuthDao clubUserAuthDao; private final ClubDao clubDao; private final AuthService authService; + private final UserService userService; + @Autowired - public ClubService(ClubUserAuthDao clubUserAuthDao, ClubDao clubDao, AuthService authService){ + public ClubService(ClubUserAuthDao clubUserAuthDao, ClubDao clubDao, AuthService authService, @Lazy UserService userService){ this.clubDao = clubDao; this.clubUserAuthDao = clubUserAuthDao; this.authService = authService; + this.userService = userService; } public Club getClubWithoutAuthById(int id){ ClubVo clubById = this.clubDao.getClubById(id); @@ -39,4 +49,29 @@ public class ClubService { clubById.setAuth(auth); return clubById; } + private List getUserInformationByClubId(int clubId){ + List usersByClubId = this.clubUserAuthDao.getUsersByClubId(clubId); + return usersByClubId.stream().map(this::packageInformation).toList(); + } + private ClubUserSimpleInformation packageInformation(ClubUserAuthVo clubUserAuthVo){ + int i = clubUserAuthVo.authId(); + String authName = i != -1 ? authService.getAuthById(i).getName() : "社员"; + UserSimpleInformation userSimpleInformation = userService.getUserSimpleInformation(clubUserAuthVo.userId()); + ClubUserSimpleInformation clubUserSimpleInformation = new ClubUserSimpleInformation(); + clubUserSimpleInformation.setId(userSimpleInformation.getId()); + clubUserSimpleInformation.setName(userSimpleInformation.getName()); + clubUserSimpleInformation.setAvatar(userSimpleInformation.getAvatar()); + clubUserSimpleInformation.setClubId(clubUserAuthVo.clubId()); + clubUserSimpleInformation.setClubAuthName(authName); + return clubUserSimpleInformation; + } + public BaseResponse getClubInformationById(int clubId) { + Club clubWithoutAuthById = getClubWithoutAuthById(clubId); + ClubInformation clubInformation = new ClubInformation(); + clubInformation.setId(clubWithoutAuthById.getId()); + clubInformation.setName(clubWithoutAuthById.getName()); + clubInformation.setCommit(clubWithoutAuthById.getCommit()); + clubInformation.setUsers(this.getUserInformationByClubId(clubId)); + return BaseResponse.success(clubInformation); + } } diff --git a/src/main/java/org/mmga/clubs/service/UserService.java b/src/main/java/org/mmga/clubs/service/UserService.java index 5f3c86d..d232119 100644 --- a/src/main/java/org/mmga/clubs/service/UserService.java +++ b/src/main/java/org/mmga/clubs/service/UserService.java @@ -230,4 +230,8 @@ public class UserService { fileInputStream.close(); } } + + public UserSimpleInformation getUserSimpleInformation(int userId) { + return userDao.getUserSimpleInformation(userId); + } } diff --git a/src/main/resources/org/mmga/clubs/dao/ClubUserAuthDao.xml b/src/main/resources/org/mmga/clubs/dao/ClubUserAuthDao.xml index 535f40e..ff336ec 100644 --- a/src/main/resources/org/mmga/clubs/dao/ClubUserAuthDao.xml +++ b/src/main/resources/org/mmga/clubs/dao/ClubUserAuthDao.xml @@ -6,4 +6,7 @@ + \ No newline at end of file diff --git a/src/main/resources/org/mmga/clubs/dao/UserDao.xml b/src/main/resources/org/mmga/clubs/dao/UserDao.xml index 8b50e07..8b78ef0 100644 --- a/src/main/resources/org/mmga/clubs/dao/UserDao.xml +++ b/src/main/resources/org/mmga/clubs/dao/UserDao.xml @@ -36,4 +36,7 @@ + \ No newline at end of file