Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,24 +1,15 @@
package com.kustacks.kuring.club.adapter.out.persistence;

import com.kustacks.kuring.club.application.port.out.ClubQueryPort;
import com.kustacks.kuring.club.application.port.out.ClubSubscriptionCommandPort;
import com.kustacks.kuring.club.application.port.out.ClubSubscriptionQueryPort;
import com.kustacks.kuring.club.application.port.out.dto.ClubDetailReadModel;
import com.kustacks.kuring.club.application.port.out.dto.ClubReadModel;
import com.kustacks.kuring.club.domain.Club;
import com.kustacks.kuring.club.domain.ClubCategory;
import com.kustacks.kuring.club.domain.ClubDivision;
import com.kustacks.kuring.club.domain.ClubSubscribe;
import com.kustacks.kuring.common.annotation.PersistenceAdapter;
import com.kustacks.kuring.user.domain.RootUser;
import lombok.RequiredArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import com.kustacks.kuring.club.application.port.out.*;
import com.kustacks.kuring.club.application.port.out.dto.*;
import com.kustacks.kuring.club.domain.*;
import com.kustacks.kuring.common.annotation.*;
import com.kustacks.kuring.user.domain.*;
import lombok.*;

import java.time.*;
import java.util.*;
import java.util.stream.*;

@PersistenceAdapter
@RequiredArgsConstructor
Expand All @@ -40,13 +31,18 @@ public Optional<ClubDetailReadModel> findClubDetailById(Long id) {
return clubRepository.findClubDetailById(id);
}

@Override
public List<ClubReadModel> findClubReadModelsByIds(List<Long> ids) {
return clubRepository.findClubReadModelsByIds(ids);
}

@Override
public Optional<Club> findClubById(Long id) {
return clubRepository.findById(id);
}

@Override
public List<Long> findSubscribedClubIds(
public List<Long> findSubscribedClubIdsByRootUserIdAndClubIds(
List<Long> clubIds,
Long rootUserId
) {
Expand All @@ -57,6 +53,10 @@ public List<Long> findSubscribedClubIds(
return clubSubscribeRepository.findByClubIdInAndRootUserId(clubIds, rootUserId);
}

@Override
public List<Long> findSubscribedClubIdsByRootUserId(Long rootUserId) {
return clubSubscribeRepository.findClubIdsByRootUserId(rootUserId);
}

@Override
public Long countSubscribers(Long clubId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package com.kustacks.kuring.club.adapter.out.persistence;

import com.kustacks.kuring.club.application.port.out.dto.ClubDetailReadModel;
import com.kustacks.kuring.club.application.port.out.dto.ClubReadModel;
import com.kustacks.kuring.club.domain.Club;
import com.kustacks.kuring.club.domain.ClubCategory;
import com.kustacks.kuring.club.domain.ClubDivision;
import com.kustacks.kuring.club.application.port.out.dto.*;
import com.kustacks.kuring.club.domain.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.time.*;
import java.util.*;

public interface ClubQueryRepository {

List<ClubReadModel> searchClubs(ClubCategory category, List<ClubDivision> divisions);

List<ClubReadModel> findClubReadModelsByIds(List<Long> ids);

Optional<ClubDetailReadModel> findClubDetailById(Long id);

List<Club> findClubsBetweenDates(LocalDateTime start, LocalDateTime end);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
package com.kustacks.kuring.club.adapter.out.persistence;

import com.kustacks.kuring.club.application.port.out.dto.ClubDetailReadModel;
import com.kustacks.kuring.club.application.port.out.dto.ClubReadModel;
import com.kustacks.kuring.club.application.port.out.dto.QClubReadModel;
import com.kustacks.kuring.club.domain.Club;
import com.kustacks.kuring.club.domain.ClubCategory;
import com.kustacks.kuring.club.domain.ClubDivision;
import com.kustacks.kuring.club.domain.ClubSnsType;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import static com.kustacks.kuring.club.domain.QClub.club;
import static com.kustacks.kuring.club.domain.QClubSns.clubSns;
import com.kustacks.kuring.club.application.port.out.dto.*;
import com.kustacks.kuring.club.domain.*;
import com.querydsl.core.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.jpa.impl.*;
import lombok.*;
import org.springframework.transaction.annotation.*;

import java.time.*;
import java.util.*;

import static com.kustacks.kuring.club.domain.QClub.*;
import static com.kustacks.kuring.club.domain.QClubSns.*;

@RequiredArgsConstructor
class ClubQueryRepositoryImpl implements ClubQueryRepository {
Expand Down Expand Up @@ -69,6 +63,25 @@ public List<ClubReadModel> searchClubs(
.fetch();
}

@Override
@Transactional(readOnly = true)
public List<ClubReadModel> findClubReadModelsByIds(List<Long> ids) {
return queryFactory
.select(new QClubReadModel(
club.id,
club.name,
club.summary,
club.iconImagePath,
club.category,
club.division,
club.recruitStartAt,
club.recruitEndAt
))
.from(club)
.where(club.id.in(ids))
.fetch();
}

@Override
@Transactional(readOnly = true)
public Optional<ClubDetailReadModel> findClubDetailById(Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,11 @@ SELECT cs.club.id AS clubId, COUNT(cs) AS subscriberCount
and cs.rootUser.id = :rootUserId
""")
List<Long> findByClubIdInAndRootUserId(List<Long> clubIds, Long rootUserId);

@Query("""
select cs.club.id
from ClubSubscribe cs
where cs.rootUser.id = :rootUserId
""")
List<Long> findClubIdsByRootUserId(Long rootUserId);
}
Comment thread
jiyun921 marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package com.kustacks.kuring.club.application.port.in;

import com.kustacks.kuring.club.application.port.in.dto.ClubDetailCommand;
import com.kustacks.kuring.club.application.port.in.dto.ClubDetailResult;
import com.kustacks.kuring.club.application.port.in.dto.ClubDivisionResult;
import com.kustacks.kuring.club.application.port.in.dto.ClubListCommand;
import com.kustacks.kuring.club.application.port.in.dto.ClubListResult;
import com.kustacks.kuring.club.application.port.in.dto.*;

import java.util.List;
import java.util.*;

public interface ClubQueryUseCase {
List<ClubDivisionResult> getClubDivisions();

ClubListResult getClubs(ClubListCommand command);

ClubDetailResult getClubDetail(ClubDetailCommand command);
ClubListResult getSubscribedClubs(SubscribedClubListCommand command);

ClubDetailResult getClubDetail(ClubDetailCommand command);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.kustacks.kuring.club.application.port.in;

import com.kustacks.kuring.club.application.port.in.dto.ClubSubscriptionCommand;
import com.kustacks.kuring.club.application.port.in.dto.*;

public interface ClubSubscriptionUseCase {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.kustacks.kuring.club.application.port.in.dto;

public record SubscribedClubListCommand(
String email
) {
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
package com.kustacks.kuring.club.application.port.out;

import com.kustacks.kuring.club.application.port.out.dto.ClubDetailReadModel;
import com.kustacks.kuring.club.application.port.out.dto.ClubReadModel;
import com.kustacks.kuring.club.domain.Club;
import com.kustacks.kuring.club.domain.ClubCategory;
import com.kustacks.kuring.club.domain.ClubDivision;
import com.kustacks.kuring.club.application.port.out.dto.*;
import com.kustacks.kuring.club.domain.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.time.*;
import java.util.*;

public interface ClubQueryPort {

Optional<Club> findClubById(Long id);

Optional<ClubDetailReadModel> findClubDetailById(Long id);

List<ClubReadModel> findClubReadModelsByIds(List<Long> ids);

List<ClubReadModel> searchClubs(ClubCategory category, List<ClubDivision> divisions);

List<Club> findClubsBetweenDates(LocalDateTime start, LocalDateTime end);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package com.kustacks.kuring.club.application.port.out;

import java.util.List;
import java.util.Map;
import java.util.*;

public interface ClubSubscriptionQueryPort {

boolean existsSubscription(Long rootUserId, Long clubId);

Long countSubscriptions(Long rootUserId);

List<Long> findSubscribedClubIds(List<Long> clubIds, Long rootUserId);
List<Long> findSubscribedClubIdsByRootUserIdAndClubIds(List<Long> clubIds, Long rootUserId);

List<Long> findSubscribedClubIdsByRootUserId(Long rootUserId);

Long countSubscribers(Long clubId);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package com.kustacks.kuring.club.application.service;

import com.kustacks.kuring.club.application.port.in.ClubSubscriptionUseCase;
import com.kustacks.kuring.club.application.port.in.dto.ClubSubscriptionCommand;
import com.kustacks.kuring.club.application.port.out.ClubQueryPort;
import com.kustacks.kuring.club.application.port.out.ClubSubscriptionCommandPort;
import com.kustacks.kuring.club.application.port.out.ClubSubscriptionQueryPort;
import com.kustacks.kuring.club.domain.Club;
import com.kustacks.kuring.common.annotation.UseCase;
import com.kustacks.kuring.common.exception.InvalidStateException;
import com.kustacks.kuring.common.exception.code.ErrorCode;
import com.kustacks.kuring.common.properties.ServerProperties;
import com.kustacks.kuring.user.application.port.out.RootUserQueryPort;
import com.kustacks.kuring.user.application.port.out.UserEventPort;
import com.kustacks.kuring.user.application.port.out.UserQueryPort;
import com.kustacks.kuring.user.domain.RootUser;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import com.kustacks.kuring.club.application.port.in.*;
import com.kustacks.kuring.club.application.port.in.dto.*;
import com.kustacks.kuring.club.application.port.out.*;
import com.kustacks.kuring.club.domain.*;
import com.kustacks.kuring.common.annotation.*;
import com.kustacks.kuring.common.exception.*;
import com.kustacks.kuring.common.exception.code.*;
import com.kustacks.kuring.common.properties.*;
import com.kustacks.kuring.storage.application.port.out.*;
import com.kustacks.kuring.user.application.port.out.*;
import com.kustacks.kuring.user.domain.*;
import lombok.*;
import lombok.extern.slf4j.*;
import org.springframework.transaction.annotation.*;

@Slf4j
@UseCase
Expand All @@ -29,10 +26,11 @@ public class ClubCommandService implements ClubSubscriptionUseCase {
private final ServerProperties serverProperties;
private final ClubQueryPort clubQueryPort;
private final ClubSubscriptionCommandPort clubSubscriptionCommandPort;
private final ClubSubscriptionQueryPort countSubscriptionsQueryPort;
private final ClubSubscriptionQueryPort clubSubscriptionQueryPort;
private final RootUserQueryPort rootUserQueryPort;
private final UserQueryPort userQueryPort;
private final UserEventPort userEventPort;
private final StoragePort storagePort;
Comment thread
jiyun921 marked this conversation as resolved.
Outdated

@Override
public long addSubscription(ClubSubscriptionCommand command) {
Expand All @@ -46,7 +44,7 @@ public long addSubscription(ClubSubscriptionCommand command) {
clubSubscriptionCommandPort.saveSubscription(rootUser, club);
subscribeAllLoggedInDevices(rootUser.getId(), makeTopic(club));

return countSubscriptionsQueryPort.countSubscriptions(rootUser.getId());
return clubSubscriptionQueryPort.countSubscriptions(rootUser.getId());
}

@Override
Expand All @@ -60,11 +58,11 @@ public long removeSubscription(ClubSubscriptionCommand command) {
clubSubscriptionCommandPort.deleteSubscription(rootUser, club);
unsubscribeAllLoggedInDevices(rootUser.getId(), makeTopic(club));

return countSubscriptionsQueryPort.countSubscriptions(rootUser.getId());
return clubSubscriptionQueryPort.countSubscriptions(rootUser.getId());
}

private boolean isAlreadySubscription(RootUser rootUser, Club club) {
return countSubscriptionsQueryPort.existsSubscription(rootUser.getId(), club.getId());
return clubSubscriptionQueryPort.existsSubscription(rootUser.getId(), club.getId());
}

private RootUser findRootUserByEmail(String email) {
Expand Down
Loading
Loading