diff --git a/src/main/java/me/soo/helloworld/config/MyBatisConfig.java b/src/main/java/me/soo/helloworld/config/MyBatisConfig.java index b0f64a4..3e0cc34 100644 --- a/src/main/java/me/soo/helloworld/config/MyBatisConfig.java +++ b/src/main/java/me/soo/helloworld/config/MyBatisConfig.java @@ -1,5 +1,6 @@ package me.soo.helloworld.config; +import me.soo.helloworld.enumeration.AlarmTypes; import me.soo.helloworld.enumeration.FriendStatus; import me.soo.helloworld.enumeration.LanguageLevel; import me.soo.helloworld.enumeration.LanguageStatus; @@ -28,7 +29,7 @@ public SqlSessionFactory sqlSessionFactory(@Qualifier("proxyDataSource") DataSou sessionFactory.setMapperLocations(resolver.getResources("/mappers/*.xml")); sessionFactory.setTypeHandlers(new LanguageLevel.TypeHandler(), new LanguageStatus.TypeHandler(), - new FriendStatus.TypeHandler()); + new FriendStatus.TypeHandler(), new AlarmTypes.TypeHandler()); return sessionFactory.getObject(); } diff --git a/src/main/java/me/soo/helloworld/enumeration/AlarmTypes.java b/src/main/java/me/soo/helloworld/enumeration/AlarmTypes.java new file mode 100644 index 0000000..19dfb48 --- /dev/null +++ b/src/main/java/me/soo/helloworld/enumeration/AlarmTypes.java @@ -0,0 +1,24 @@ +package me.soo.helloworld.enumeration; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import me.soo.helloworld.util.handler.EnumCategoryTypeHandler; +import org.apache.ibatis.type.MappedTypes; + +@Getter +@RequiredArgsConstructor +public enum AlarmTypes implements EnumCategory { + + FRIEND_REQUEST_RECEIVED(1), + FRIEND_REQUEST_ACCEPTED(2); + + private final int category; + + @MappedTypes(AlarmTypes.class) + public static class TypeHandler extends EnumCategoryTypeHandler { + + public TypeHandler() { + super(AlarmTypes.class); + } + } +} diff --git a/src/main/java/me/soo/helloworld/mapper/AlarmMapper.java b/src/main/java/me/soo/helloworld/mapper/AlarmMapper.java new file mode 100644 index 0000000..8ef07fc --- /dev/null +++ b/src/main/java/me/soo/helloworld/mapper/AlarmMapper.java @@ -0,0 +1,10 @@ +package me.soo.helloworld.mapper; + +import me.soo.helloworld.model.alarm.Alarm; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AlarmMapper { + + public void insertAlarm(Alarm alarm); +} diff --git a/src/main/java/me/soo/helloworld/model/alarm/Alarm.java b/src/main/java/me/soo/helloworld/model/alarm/Alarm.java new file mode 100644 index 0000000..63ce7f1 --- /dev/null +++ b/src/main/java/me/soo/helloworld/model/alarm/Alarm.java @@ -0,0 +1,25 @@ +package me.soo.helloworld.model.alarm; + +import lombok.Builder; +import lombok.Getter; +import me.soo.helloworld.enumeration.AlarmTypes; + +@Getter +@Builder +public class Alarm { + + private final String to; + + private final String from; + + private final AlarmTypes type; + + public static Alarm create(String userId, String targetId, AlarmTypes type) { + + return Alarm.builder() + .from(userId) + .to(targetId) + .type(type) + .build(); + } +} diff --git a/src/main/java/me/soo/helloworld/service/AlarmService.java b/src/main/java/me/soo/helloworld/service/AlarmService.java new file mode 100644 index 0000000..4dedab8 --- /dev/null +++ b/src/main/java/me/soo/helloworld/service/AlarmService.java @@ -0,0 +1,19 @@ +package me.soo.helloworld.service; + +import lombok.RequiredArgsConstructor; +import me.soo.helloworld.enumeration.AlarmTypes; +import me.soo.helloworld.mapper.AlarmMapper; +import me.soo.helloworld.model.alarm.Alarm; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class AlarmService { + + private final AlarmMapper alarmMapper; + + public void addAlarm(String to, String from, AlarmTypes type) { + Alarm alarm = Alarm.create(to, from, type); + alarmMapper.insertAlarm(alarm); + } +} diff --git a/src/main/java/me/soo/helloworld/service/FriendService.java b/src/main/java/me/soo/helloworld/service/FriendService.java index dcc15c3..89fc79f 100644 --- a/src/main/java/me/soo/helloworld/service/FriendService.java +++ b/src/main/java/me/soo/helloworld/service/FriendService.java @@ -1,6 +1,7 @@ package me.soo.helloworld.service; import lombok.RequiredArgsConstructor; +import me.soo.helloworld.enumeration.AlarmTypes; import me.soo.helloworld.enumeration.FriendStatus; import me.soo.helloworld.exception.DuplicateRequestException; import me.soo.helloworld.exception.InvalidRequestException; @@ -28,6 +29,8 @@ public class FriendService { private final Pagination pagination; + private final AlarmService alarmService; + public void sendFriendRequest(String userId, String targetId) { TargetValidator.targetNotSelf(userId, targetId); TargetValidator.targetExistence(userService.isUserIdExist(targetId)); @@ -40,6 +43,7 @@ public void sendFriendRequest(String userId, String targetId) { validateFriendStatusDetail(status); friendMapper.sendFriendRequest(userId, targetId); + alarmService.addAlarm(targetId, userId, AlarmTypes.FRIEND_REQUEST_RECEIVED); } public FriendStatus getFriendStatus(String userId, String targetId) { @@ -56,6 +60,7 @@ public void acceptFriendRequest(String userId, String targetId) { FriendStatus status = getFriendStatus(userId, targetId); validateFriendStatus(status, FRIEND_REQUEST_RECEIVED); friendMapper.updateFriendRequest(userId, targetId, FRIEND); + alarmService.addAlarm(targetId, userId, AlarmTypes.FRIEND_REQUEST_ACCEPTED); } public void rejectFriendRequest(String userId, String targetId) { diff --git a/src/main/resources/mappers/AlarmMapper.xml b/src/main/resources/mappers/AlarmMapper.xml new file mode 100644 index 0000000..640c3e1 --- /dev/null +++ b/src/main/resources/mappers/AlarmMapper.xml @@ -0,0 +1,9 @@ + + + + + + + INSERT INTO alarms (alarmTo, alarmFrom, type) VALUES (#{to}, #{from}, #{type}) + + \ No newline at end of file diff --git a/src/main/resources/sql/alarms.sql b/src/main/resources/sql/alarms.sql new file mode 100644 index 0000000..e12f2d1 --- /dev/null +++ b/src/main/resources/sql/alarms.sql @@ -0,0 +1,10 @@ +create table alarms +( + id bigint auto_increment + primary key, + alarmTo varchar(20) not null, + alarmFrom varchar(20) not null, + type tinyint not null, + hasRead enum ('Y', 'N') default 'N' not null, + createdAt timestamp default CURRENT_TIMESTAMP not null +); \ No newline at end of file diff --git a/src/test/java/me/soo/helloworld/AlarmMapperTest.java b/src/test/java/me/soo/helloworld/AlarmMapperTest.java new file mode 100644 index 0000000..c9309c0 --- /dev/null +++ b/src/test/java/me/soo/helloworld/AlarmMapperTest.java @@ -0,0 +1,29 @@ +package me.soo.helloworld; + +import me.soo.helloworld.enumeration.AlarmTypes; +import me.soo.helloworld.mapper.AlarmMapper; +import me.soo.helloworld.model.alarm.Alarm; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest +public class AlarmMapperTest { + private final String userId = "Soo1045"; + + private final String targetId = "Hello"; + + @Autowired + AlarmMapper alarmMapper; + + @Test + public void insertAlarmTest() { + Alarm alarm = Alarm.create(userId, targetId, AlarmTypes.FRIEND_REQUEST_RECEIVED); + + alarmMapper.insertAlarm(alarm); + } + +}