Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -44,11 +44,11 @@ public void sendTeamInvitationMail(
final String senderName,
final String teamName,
final long teamId,
final String invitationId
final long invitationId
) {
Map<String, String> map = new HashMap<>();
map.put("teamId", String.format("%d", teamId));
map.put("invitationId", invitationId);
map.put("invitationId", String.format("%d", invitationId));
map.put("teamName", teamName);
map.put("senderName", senderName);
MimeMessage message = makeMessage(email, MAIL_INVITE_TEAM_MEMBER, INVITE_TEAM_MEMBER_TEMPLATE_NAME, map);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques
}

private void checkDuplicateInvitation(final TeamInvitationCreateServiceRequest request) {
teamInvitationFinder.presentById(request.teamId() + request.targetEmail().getEmail()
teamInvitationFinder.presentByTeamIdAndEmail(request.teamId(), request.targetEmail()
)
.ifPresent(invitation -> {
throw new TeamInvitationException(ALREADY_INVITED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ public class TeamInvitationDeleter {
public void deleteTeamInvitation(final TeamInvitation teamInvitation) {
teamInvitationRepository.delete(teamInvitation);
}

public void deleteAll(final List<TeamInvitation> expiredInvitation) {
teamInvitationRepository.deleteAll(expiredInvitation);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.tiki.server.email.teaminvitation.adapter;

import com.tiki.server.common.support.RepositoryAdapter;
import com.tiki.server.email.Email;
import com.tiki.server.email.teaminvitation.exception.TeamInvitationException;
import com.tiki.server.email.teaminvitation.entity.TeamInvitation;
import com.tiki.server.email.teaminvitation.repository.TeamInvitationRepository;
Expand All @@ -10,6 +11,7 @@
import java.time.LocalDate;
import java.util.List;

import static com.tiki.server.email.teaminvitation.messages.ErrorCode.ALREADY_INVITED;
import static com.tiki.server.email.teaminvitation.messages.ErrorCode.INVALID_TEAM_INVITATION;

@RepositoryAdapter
Expand All @@ -18,16 +20,20 @@ public class TeamInvitationFinder {

private final TeamInvitationRepository teamInvitationRepository;

public TeamInvitation findByInvitationId(final String invitationId) {
public TeamInvitation findByInvitationId(final long invitationId) {
return teamInvitationRepository.findById(invitationId)
.orElseThrow(() -> new TeamInvitationException(INVALID_TEAM_INVITATION));
}

public List<TeamInvitation> findAllByIdStartingWith(final String teamId) {
return teamInvitationRepository.findAllByIdStartingWith(teamId);
public List<TeamInvitation> findByExpiredDate(final LocalDate expiredDate) {
return teamInvitationRepository.findByExpiredDateBefore(expiredDate);
}

public Optional<TeamInvitation> presentById(final String id) {
return teamInvitationRepository.presentById(id);
public List<TeamInvitation> findAllByTeamId(final long teamId) {
return teamInvitationRepository.findAllByTeamId(teamId);
}

public Optional<TeamInvitation> presentByTeamIdAndEmail(final long teamId, final Email targetEmail){
return teamInvitationRepository.findByTeamIdAndEmail(teamId, targetEmail);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.tiki.server.email.teaminvitation.service.TeamInvitationService;
import com.tiki.server.email.teaminvitation.service.dto.TeamInvitationEmailsGetResponse;
import com.tiki.server.email.teaminvitation.service.dto.TeamInvitationInformGetResponse;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -35,7 +34,7 @@ public SuccessResponse<TeamInvitationEmailsGetResponse> getTeamInvitation(
@DeleteMapping("/team/{teamId}")
public SuccessResponse<?> deleteTeamInvitationFromAdmin(
final Principal principal,
@RequestParam @NonNull final String invitationId,
@RequestParam final long invitationId,
@PathVariable final long teamId
) {
long memberId = Long.parseLong(principal.getName());
Expand All @@ -46,7 +45,7 @@ public SuccessResponse<?> deleteTeamInvitationFromAdmin(
@ResponseStatus(HttpStatus.OK)
@GetMapping
public SuccessResponse<TeamInvitationInformGetResponse> getInvitationInform(
@RequestParam @NonNull final String invitationId
@RequestParam final long invitationId
) {
TeamInvitationInformGetResponse response = teamInvitationService.getInvitationInform(invitationId);
return SuccessResponse.success(GET_TEAM_INVITATION_INFORM.getMessage(), response);
Expand All @@ -57,7 +56,7 @@ public SuccessResponse<TeamInvitationInformGetResponse> getInvitationInform(
public SuccessResponse<?> createTeamMemberFromInvitation(
Principal principal,
@RequestParam final long teamId,
@RequestParam @NonNull final String teamInvitationId
@RequestParam final long teamInvitationId
) {
long memberId = Long.parseLong(principal.getName());
teamInvitationService.createTeamMemberFromInvitation(memberId, teamId, teamInvitationId);
Expand All @@ -68,7 +67,7 @@ public SuccessResponse<?> createTeamMemberFromInvitation(
@DeleteMapping
public SuccessResponse<?> deleteTeamInvitationFromUser(
Principal principal,
@RequestParam @NonNull final String invitationId
@RequestParam final long invitationId
) {
long memberId = Long.parseLong(principal.getName());
teamInvitationService.deleteTeamInvitation(memberId, invitationId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
package com.tiki.server.email.teaminvitation.entity;

import static lombok.AccessLevel.PRIVATE;
import static lombok.AccessLevel.PROTECTED;

import com.tiki.server.common.entity.BaseTime;
import com.tiki.server.email.Email;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.redis.core.RedisHash;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

@Getter
@Entity
@Builder
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor(access = PRIVATE)
@RedisHash(value = "TeamInvitation", timeToLive = 604800)
public class TeamInvitation extends BaseTime {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "invitation_id")
private Long id;

private String sender;

Expand All @@ -32,11 +38,10 @@ public class TeamInvitation extends BaseTime {
private LocalDate expiredDate;

public static TeamInvitation of(final String sender, final long teamId, final Email email) {
return TeamInvitation.builder().id(teamId + email.getEmail()).sender(sender).teamId(teamId).email(email)
.expiredDate(LocalDate.now()).build();
return TeamInvitation.builder().sender(sender).teamId(teamId).email(email).expiredDate(LocalDate.now()).build();
}

public String getEmailToString() {
public String getEmailToString(){
return email.getEmail();
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.tiki.server.email.teaminvitation.repository;

import com.tiki.server.email.Email;
import com.tiki.server.email.teaminvitation.entity.TeamInvitation;
import java.util.List;
import java.util.Optional;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.jpa.repository.JpaRepository;

import java.time.LocalDate;
import java.util.List;

public interface TeamInvitationRepository extends JpaRepository<TeamInvitation, Long> {

public interface TeamInvitationRepository extends CrudRepository<TeamInvitation, String> {
List<TeamInvitation> findByExpiredDateBefore(final LocalDate expiredDate);

List<TeamInvitation> findAllByIdStartingWith(final String teamId);
List<TeamInvitation> findAllByTeamId(final long teamId);

Optional<TeamInvitation> presentById(final String id);
Optional<TeamInvitation> findByTeamIdAndEmail(final long teamId, final Email email);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.tiki.server.email.teaminvitation.scheduler;

import com.tiki.server.email.teaminvitation.adapter.TeamInvitationDeleter;
import com.tiki.server.email.teaminvitation.adapter.TeamInvitationFinder;
import com.tiki.server.email.teaminvitation.entity.TeamInvitation;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.List;

@Component
@RequiredArgsConstructor
public class TeamInvitationScheduler {

private final TeamInvitationDeleter teamInvitationDeleter;
private final TeamInvitationFinder teamInvitationFinder;

@Scheduled(cron = "0 0 0 * * ?")
public void cleanUpExpiredInvites() {
LocalDate now = LocalDate.now();
List<TeamInvitation> expiredInvites = teamInvitationFinder.findByExpiredDate(now);
if (!expiredInvites.isEmpty()) {
teamInvitationDeleter.deleteAll(expiredInvites);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ public class TeamInvitationService {
private final MemberFinder memberFinder;
private final AwsHandler awsHandler;

public TeamInvitationInformGetResponse getInvitationInform(final String invitationId) {
public TeamInvitationInformGetResponse getInvitationInform(final long invitationId) {
TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId);
Team team = teamFinder.findById(invitation.getTeamId());
TeamResponse response = TeamResponse.createWithIcon(team, awsHandler.getDownloadPreSignedUrl(team.getIconImageKey()));
return TeamInvitationInformGetResponse.of(invitation, response);
}

@Transactional
public void createTeamMemberFromInvitation(final long memberId, final long teamId, final String invitationId) {
public void createTeamMemberFromInvitation(final long memberId, final long teamId, final long invitationId) {
checkIsPresentTeamMember(memberId, teamId);
Member member = memberFinder.findById(memberId);
checkTeamNumber(memberId);
Expand All @@ -58,14 +58,14 @@ public void createTeamMemberFromInvitation(final long memberId, final long teamI
teamInvitationDeleter.deleteTeamInvitation(invitation);
}

public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final String invitationId) {
public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final long invitationId) {
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManager.checkMemberAccessible(Position.ADMIN);
TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId);
teamInvitationDeleter.deleteTeamInvitation(teamInvitation);
}

public void deleteTeamInvitation(final long memberId, final String invitationId) {
public void deleteTeamInvitation(final long memberId, final long invitationId) {
TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId);
Member member = memberFinder.findById(memberId);
checkMemberMatched(invitation, member);
Expand All @@ -76,7 +76,7 @@ public void deleteTeamInvitation(final long memberId, final String invitationId)
public TeamInvitationEmailsGetResponse getInvitations(final long memberId, final long teamId) {
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManager.checkMemberAccessible(Position.ADMIN);
List<TeamInvitation> teamInvitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId));
List<TeamInvitation> teamInvitations = teamInvitationFinder.findAllByTeamId(teamId);
return TeamInvitationEmailsGetResponse.from(teamInvitations);
}

Expand Down