나 포함 4명이서 독거노인 관리 프로그램을 만들기로 하였다.
이번 프로젝트는 정말 제대로 만들어보는 프로그램(젤리도 있지만 인강을 듣기 전이다.)이기 때문에 DB 설계를 구체적으로 해보았다.
DB 설계를 하면서 DB 공부는 접근 기술만 공부해봤지 직접 짜보는 건 처음이기 때문에 어려웠다...
개요
siso의 개요를 간단하게 말하자면 다음과 같다.
고령화 시대가 계속되면서 문제가 되는 부분은 고독사이다.
전국 지자체에서 고독사 문제를 해결하기 위해 다양한 정책을 하고 있다.
하지만 아래의 뉴스와 같이 안부전화를 돌리는 일을 따로 직원만 둬도 역부족하다.
그래서 고민한 결과 독거노인 분들이 매일 출석체크를 하여 상황을 지자체에서 빠르게 알 수 있도록 하고,
유저 입장에서는 몇 가지의 기능을 지원하여 외롭지 않게 하도록 할 예정이다.
(독거노인의 어려움 1위는 간호, 2위는 외로움이다.)
시나리오
일단 siso의 시나리오의 흐름도는
- 관할 읍면동 사무소와 읍면동 주민센터를 미리 DB에 저장한다.
- 관리자가 관할된 읍면동 사무소를 기입하여 회원가입을 한다.
- 유저들이 관리자를 지정하고 회원가입을 한다.
- 그리고 자주 가는 주민센터를 지정한다.
- 매일 유저들은 출석체크를 한다.
- 주민센터에 갈 경우 QR 체크를 하여 다른 유저가 주민센터에 누가 있는지 확인하여 갈 수 있다. (퇴실 시에도 QR 체크를 하고 안 할 시 위치 기반으로 퇴실 처리하도록 할 것이다.)
- 식사시간에 홀로 식사하시지 않게 하기 위해 식사 친구를 구할 수 있도록 할 것이다.
(이 밖에 위치 기반을 통하여 치매노인 분들을 위치추적을 할 수 있도록 하거나 다른 기능을 넣어볼 것이다.)
ERD
위와 같이 DB를 설계하였다.
이번 주는 MyBatis DB 접근 기술을 사용하여 기본 CRUD를 하기로 하였고
나는 admin 테이블과 county_office 테이블을 하기로 하였다.
county_office 테이블의 CRUD는 아래의 공공데이터를 통하여 파싱 후 insert를 할 것이다.
Admin 기본 CRUD 코드
AdminMapper 인터페이스
@Mapper
public interface AdminMapper {
void save(Admin admin);
List<Admin> select(Admin admin);
void update(@Param("id") Long id, @Param("admin") AdminDto adminDto);
void delete(Long id);
}
AdminMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="siso.project.repository.AdminMapper">
<insert id="save" useGeneratedKeys="true" keyProperty="id">
<if test="countyOfficeId != null">
insert into admin (admin_name, admin_id, admin_password, admin_phone_number, county_office_id)
values (#{adminName}, #{adminId}, #{adminPassword}, #{adminPhoneNumber}, #{countyOfficeId})
</if>
<if test="countyOfficeId == null">
insert into admin (admin_name, admin_id, admin_password, admin_phone_number)
values (#{adminName}, #{adminId}, #{adminPassword}, #{adminPhoneNumber})
</if>
</insert>
<select id="select" resultType="Admin">
select id, admin_name, admin_id, admin_phone_number, county_office_id
from admin
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="adminName != null">
and admin_name = #{adminName}
</if>
<if test="adminId != null">
and admin_id = #{adminId}
</if>
<if test="adminPhoneNumber != null">
and admin_phone_number = #{adminPhoneNumber}
</if>
</where>
</select>
<update id="update">
update admin
<set>
<!-- 이름 변경 시 -->
<if test="admin.adminName != null">
admin_name=#{admin.adminName},
</if>
<!-- 비밀번호 변경 시 -->
<if test="admin.adminPassword != null">
admin_password=#{admin.adminPassword},
</if>
<!-- 전화번호 변경 시 -->
<if test="admin.adminPhoneNumber != null">
admin_phone_number=#{admin.adminPhoneNumber},
</if>
<!-- 사무소 변경 시 -->
<if test="admin.countyOfficeId != null">
county_office_id=#{admin.countyOfficeId},
</if>
</set>
<where>
id = #{id}
</where>
</update>
<delete id="delete">
delete from admin
<where>
id=#{id}
</where>
</delete>
</mapper>
테스트 코드
@SpringBootTest
@Transactional
class AdminMapperTest {
@Autowired
AdminMapper adminMapper;
@Test
void save() {
Admin admin = Admin.builder()
.adminName("woo")
.adminId("id")
.adminPhoneNumber("pw")
.adminPhoneNumber("010-11")
.build();
adminMapper.save(admin);
}
@Test
void idSelect() {
Admin admin = Admin.builder()
.adminName("woo")
.adminId("id")
.adminPhoneNumber("pw")
.adminPhoneNumber("010-11")
.build();
adminMapper.save(admin);
Admin selectAdmin = Admin.builder()
.adminName("woo")
.adminId("id")
.build();
List<Admin> woo = adminMapper.select(selectAdmin);
assertThat(woo.get(0).getId()).isEqualTo(admin.getId());
}
@Test
void infoUpdate() {
Admin admin = Admin.builder()
.adminName("woo")
.adminId("id")
.adminPhoneNumber("pw")
.adminPhoneNumber("010-11")
.build();
adminMapper.save(admin);
AdminDto adminDto = new AdminDto("koo", null, "asd", "010-11", null);
adminMapper.update(admin.getId(), adminDto);
}
@Test
void delete() {
Admin admin = Admin.builder()
.adminName("woo")
.adminId("id")
.adminPhoneNumber("pw")
.adminPhoneNumber("010-11")
.build();
adminMapper.save(admin);
adminMapper.delete(admin.getId());
}
}
application.properties 내 MyBatis 설정
# MyBatis 설정
mybatis.type-aliases-package=siso.project.domain
mybatis.configuration.map-underscore-to-camel-case=true
logging.level.siso.project.repository=trace
위를 추가해주면 된다!
프로젝트가 잘 끝나길..!
'개발일지 > siso' 카테고리의 다른 글
[siso/Project] siso 프로젝트 결과 화면 (0) | 2022.11.17 |
---|---|
[siso/Project] siso 프로젝트 안드로이드 알람 기능 추가 (feat. github 오픈소스) (0) | 2022.10.28 |
[siso/Project] siso 프로젝트 - 관리자 페이지 중간 결과 (0) | 2022.10.25 |
[siso/Project] 독거노인 관리 프로그램 siso 로그인, 회원가입 기능 완성 (0) | 2022.10.18 |