dajeong 2024-07-26
240726 정다정 반 CRUD
@72c3717c5905912050a43d89656089ca1022ac1f
src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
--- src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
+++ src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
@@ -67,6 +67,7 @@
                 .requestMatchers("/board/**").permitAll() // 게시판 정보 진입 허용
                 .requestMatchers("/book/**").permitAll() // 교재 정보 진입 허용
                 .requestMatchers("/file/**").permitAll() // 게시판 정보 진입 허용
+                .requestMatchers("/classes/**").permitAll() // 반 정보 진입 허용
                 .anyRequest().authenticated()); // 나머지 경로는 인증 필요
 
         // jwt 필터 처리 적용
 
src/main/java/com/takensoft/ai_lms/lms/classes/dao/ClassDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/dao/ClassDAO.java
@@ -0,0 +1,30 @@
+package com.takensoft.ai_lms.lms.classes.dao;
+
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author  : 정다정
+ * @since   : 2024.07.25
+ *
+ * 반 관련 Mapper
+ */
+@Mapper()
+public interface ClassDAO {
+    // 반 조회
+    public List<ClassVO> selectClass(String userId) throws Exception;
+
+    // 반 생성
+    public int insertClass(ClassVO classVO) throws Exception;
+
+    // 반 수정
+    public int updateClass(ClassVO classVO) throws Exception;
+
+    // 반 삭체
+    public int deleteClass(String sclsId) throws Exception;
+
+    // 반 아이디(scls_id) 존재 확인
+    public int existsClassById(String sclsId) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/service/ClassService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/service/ClassService.java
@@ -0,0 +1,28 @@
+package com.takensoft.ai_lms.lms.classes.service;
+
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+
+import java.util.List;
+
+/**
+ * @author  : 정다정
+ * since   : 2024.07.25
+ *
+ * 반 조회 관련 인터페이스
+ */
+public interface ClassService {
+    // 반 조회
+    public List<ClassVO> selectClass(String userId) throws Exception;
+
+    // 반 생성
+    public int insertClass(ClassVO classVO) throws Exception;
+
+    // 반 수정
+    public int updateClass(ClassVO classVO) throws Exception;
+
+    // 반 삭제
+    public int deleteClass(String sclsId) throws Exception;
+
+    // 반 아이디(scls_id) 존재 확인
+    boolean existsClassById(String sclsId) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/service/Impl/ClassServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/service/Impl/ClassServiceImpl.java
@@ -0,0 +1,67 @@
+package com.takensoft.ai_lms.lms.classes.service.Impl;
+
+import com.takensoft.ai_lms.common.idgen.service.IdgenService;
+import com.takensoft.ai_lms.lms.classes.dao.ClassDAO;
+import com.takensoft.ai_lms.lms.classes.service.ClassService;
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class ClassServiceImpl implements ClassService {
+
+    private final ClassDAO classDAO;
+
+    private final IdgenService classIdgn;
+
+    /**
+     * 반 조회
+     */
+    @Override
+    @Transactional
+    public List<ClassVO> selectClass(String userId) throws Exception{
+        return classDAO.selectClass(userId);
+    }
+
+    /**
+     * 반 생성
+     */
+    @Override
+    @Transactional
+    public int insertClass(ClassVO classVO) throws Exception{
+        String sclsId = classIdgn.getNextStringId();
+        classVO.setSclsId(sclsId);
+        return classDAO.insertClass(classVO);
+    }
+
+    /**
+     * 반 수정
+     */
+    @Override
+    @Transactional
+    public int updateClass(ClassVO classVO) throws Exception{
+        return classDAO.updateClass(classVO);
+    }
+
+    /**
+     * 반 삭제
+     */
+    @Override
+    @Transactional
+    public int deleteClass(String sclsId) throws Exception {
+        return classDAO.deleteClass(sclsId);
+    }
+
+    /**
+     * 반 아이디(scls_id) 존재 확인
+     */
+    @Override
+    @Transactional
+    public boolean existsClassById(String sclsId) throws Exception {
+        return classDAO.existsClassById(sclsId) > 0;
+    }
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/vo/ClassVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/vo/ClassVO.java
@@ -0,0 +1,20 @@
+package com.takensoft.ai_lms.lms.classes.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+
+public class ClassVO {
+    // 반 아이디
+    public String sclsId;
+    // 사용자 아이디(선생)
+    public String userId;
+    // 반 이름
+    public String sclsNm;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/web/ClassController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/web/ClassController.java
@@ -0,0 +1,174 @@
+package com.takensoft.ai_lms.lms.classes.web;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.takensoft.ai_lms.lms.classes.service.ClassService;
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(value="/classes")
+public class ClassController {
+
+    private final ClassService classService;
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 조회
+     */
+    @PostMapping("/selectClass.json")
+    @Operation(summary = "반 조회")
+    public String selectClass(@RequestBody Map<String, Object> params) throws Exception {
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            String userId = params.get("userId").toString();
+            List<ClassVO> result = classService.selectClass(userId);
+
+            response.addProperty("status", "success");
+            response.add("data", gson.toJsonTree(result));
+
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 생성
+     */
+    @PostMapping("/insertClass.json")
+    @Operation(summary = "반 생성")
+    public String insertClass(@RequestBody ClassVO classVO) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try{
+            // userId 또는 sclsNm(반 이름)이 비어있으면 fail
+            if (classVO.getUserId() == null || classVO.getUserId().isEmpty() ||
+                    classVO.getSclsNm() == null || classVO.getSclsNm().isEmpty()) {
+                response.addProperty("status", "fail");
+                response.addProperty("message", "userId 또는 반 이름이 비어있습니다.");
+                return gson.toJson(response);
+            }
+
+            int result = classService.insertClass(classVO);
+
+            if(result == -1){
+                response.addProperty("status", "fail");
+                return gson.toJson(response);
+            }
+
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 수정
+     */
+    @PostMapping("/updateClass.json")
+    @Operation(summary = "반 수정")
+    public String updateClass(@RequestBody ClassVO classVO) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try{
+            // 반 아이디(scls_id)가 존재하는지 확인
+            if (!classService.existsClassById(classVO.getSclsId())) {
+                // 반 아이디(scls_id)가 db에 존재 하지 않으면 수정 실패
+                response.addProperty("status", "fail");
+                response.addProperty("message", "존재 하지 않는 반 아이디(sclsId)입니다.");
+                return gson.toJson(response);
+            }
+
+            int result = classService.updateClass(classVO);
+
+            if(result == -1){
+                response.addProperty("status", "fail");
+                return gson.toJson(response);
+            }
+
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 삭제
+     */
+    @DeleteMapping("/deleteClass.json")
+    @Operation(summary = "반 삭제")
+    public String deleteClass(@RequestBody Map<String, Object> params) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            String sclsId = params.get("sclsId").toString();
+            classService.deleteClass(sclsId);
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+
+}
 
src/main/resources/mybatis/mapper/lms/classes-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/classes-SQL.xml
@@ -0,0 +1,79 @@
+<?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="com.takensoft.ai_lms.lms.classes.dao.ClassDAO">
+
+    <resultMap id="classMap" type="ClassVO">
+        <result property="sclsId" column="scls_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="sclsNm" column="scls_nm"/>
+    </resultMap>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.25
+         내 용 : 반 조회
+     -->
+    <select id="selectClass" parameterType="String" resultMap="classMap">
+        SELECT scls_id
+             , user_id
+             , scls_nm
+        FROM
+            class
+        WHERE
+            user_id = #{userId}
+    </select>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 생성
+     -->
+    <insert id="insertClass" parameterType="ClassVO">
+        INSERT INTO class( scls_id
+                         , user_id
+                         , scls_nm
+        ) VALUES ( #{sclsId}
+                 , #{userId}
+                 , #{sclsNm}
+        );
+    </insert>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 수정
+     -->
+    <update id="updateClass" parameterType="ClassVO">
+        UPDATE class
+        SET
+            scls_nm = #{sclsNm}
+        WHERE
+            scls_id = #{sclsId}
+    </update>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 삭제
+     -->
+    <delete id="deleteClass" parameterType="String">
+        DELETE FROM class
+        WHERE
+            scls_id = #{sclsId}
+    </delete>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 아이디(scls_id) 존재 확인
+     -->
+    <select id="existsClassById" parameterType="String" resultType="int">
+        SELECT
+            COUNT(*)
+        FROM
+            class
+        WHERE
+            scls_id = #{sclsId}
+    </select>
+
+</mapper>(No newline at end of file)
Add a comment
List