mjh %!s(int64=4) %!d(string=hai) anos
pai
achega
e98a87731e
Modificáronse 25 ficheiros con 691 adicións e 93 borrados
  1. 6 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/config/SpringSecurityConfiguration.java
  2. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/AnnouncementRecord.java
  3. 21 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseProject.java
  4. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseSelection.java
  5. 1 2
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/MessageRecord.java
  6. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/AnnouncementRecordKey.java
  7. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/CourseSelectionKey.java
  8. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/MessageRecordKey.java
  9. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/AnnouncementRecordRepository.java
  10. 9 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseProjectRepository.java
  11. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseSelectionRepository.java
  12. 1 5
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/MessageRecordRepository.java
  13. 1 2
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseService.java
  14. 16 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/ProjectService.java
  15. 1 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/subsystem/DevcloudService.java
  16. 1 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/AnnouncementServiceImpl.java
  17. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseServiceImpl.java
  18. 1 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/MessageServiceImpl.java
  19. 55 4
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/ProjectServiceImpl.java
  20. 1 1
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseController.java
  21. 48 4
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/ProjectController.java
  22. 6 2
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/errors/CustomErrorException.java
  23. 0 8
      seecoder-portal-server/src/main/resources/localData.sql
  24. 515 0
      seecoder-portal-server/src/main/resources/portal.sql
  25. 0 55
      seecoder-portal-server/src/main/resources/set_fk.sql

+ 6 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/config/SpringSecurityConfiguration.java

@@ -99,7 +99,12 @@ public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
                         "/api/message/getByCourseId",
                         "/api/message/getView",
                         "/api/message/read",
-                        "/api/project/findAll"
+                        "/api/project",
+                        "/api/project/findAll",
+                        "/api/project/findCourse",
+                        "/api/project/findNonCourse",
+                        "/api/project/findById",
+                        "/api/project/findByCourse"
                 )
                 .permitAll() // authenticate
                 .and()

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/AnnouncementRecord.java

@@ -1,6 +1,6 @@
 package cn.seecoder.seecoderportalserver.domain;
 
-import cn.seecoder.seecoderportalcommon.vo.AnnouncementRecordKey;
+import cn.seecoder.seecoderportalserver.domain.key.AnnouncementRecordKey;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;

+ 21 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseProject.java

@@ -0,0 +1,21 @@
+package cn.seecoder.seecoderportalserver.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Data
+@Entity
+@Table(name = "course_project")
+public class CourseProject {
+    @OneToOne
+    @JoinColumn(name = "course_id",
+            foreignKey = @ForeignKey(name = "course_project_course_id_fk"))
+    private Course course;
+
+    @Id
+    @Column(unique = true)
+    @NotNull
+    private Long projectId;
+}

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseSelection.java

@@ -1,6 +1,6 @@
 package cn.seecoder.seecoderportalserver.domain;
 
-import cn.seecoder.seecoderportalcommon.vo.CourseSelectionKey;
+import cn.seecoder.seecoderportalserver.domain.key.CourseSelectionKey;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;

+ 1 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/MessageRecord.java

@@ -1,8 +1,7 @@
 package cn.seecoder.seecoderportalserver.domain;
 
 
-import cn.seecoder.seecoderportalcommon.vo.MessageRecordKey;
-import org.hibernate.validator.constraints.br.CPF;
+import cn.seecoder.seecoderportalserver.domain.key.MessageRecordKey;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;

+ 1 - 1
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/AnnouncementRecordKey.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/AnnouncementRecordKey.java

@@ -1,4 +1,4 @@
-package cn.seecoder.seecoderportalcommon.vo;
+package cn.seecoder.seecoderportalserver.domain.key;
 
 import java.io.Serializable;
 

+ 1 - 1
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/CourseSelectionKey.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/CourseSelectionKey.java

@@ -1,4 +1,4 @@
-package cn.seecoder.seecoderportalcommon.vo;
+package cn.seecoder.seecoderportalserver.domain.key;
 
 import java.io.Serializable;
 

+ 1 - 1
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/MessageRecordKey.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/key/MessageRecordKey.java

@@ -1,4 +1,4 @@
-package cn.seecoder.seecoderportalcommon.vo;
+package cn.seecoder.seecoderportalserver.domain.key;
 
 import java.io.Serializable;
 

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/AnnouncementRecordRepository.java

@@ -1,6 +1,6 @@
 package cn.seecoder.seecoderportalserver.repository;
 
-import cn.seecoder.seecoderportalcommon.vo.AnnouncementRecordKey;
+import cn.seecoder.seecoderportalserver.domain.key.AnnouncementRecordKey;
 import cn.seecoder.seecoderportalserver.domain.AnnouncementRecord;
 import org.springframework.data.jpa.repository.JpaRepository;
 

+ 9 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseProjectRepository.java

@@ -0,0 +1,9 @@
+package cn.seecoder.seecoderportalserver.repository;
+
+import cn.seecoder.seecoderportalserver.domain.CourseProject;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface CourseProjectRepository extends JpaRepository<CourseProject, Long> {
+}

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseSelectionRepository.java

@@ -1,7 +1,7 @@
 package cn.seecoder.seecoderportalserver.repository;
 
 import cn.seecoder.seecoderportalserver.domain.CourseSelection;
-import cn.seecoder.seecoderportalcommon.vo.CourseSelectionKey;
+import cn.seecoder.seecoderportalserver.domain.key.CourseSelectionKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;

+ 1 - 5
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/MessageRecordRepository.java

@@ -1,12 +1,8 @@
 package cn.seecoder.seecoderportalserver.repository;
 
-import cn.seecoder.seecoderportalcommon.vo.MessageRecordKey;
-import cn.seecoder.seecoderportalserver.domain.Message;
+import cn.seecoder.seecoderportalserver.domain.key.MessageRecordKey;
 import cn.seecoder.seecoderportalserver.domain.MessageRecord;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import javax.validation.constraints.NotNull;
-import java.util.Optional;
-
 public interface MessageRecordRepository extends JpaRepository<MessageRecord, MessageRecordKey> {
 }

+ 1 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseService.java

@@ -1,8 +1,7 @@
 package cn.seecoder.seecoderportalserver.service;
 
 import cn.seecoder.seecoderportalcommon.vo.*;
-import cn.seecoder.seecoderportalserver.domain.Course;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import cn.seecoder.seecoderportalserver.domain.key.CourseSelectionKey;
 
 import java.util.List;
 

+ 16 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/ProjectService.java

@@ -1,7 +1,22 @@
 package cn.seecoder.seecoderportalserver.service;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
 public interface ProjectService {
-    JSONObject findAllProjects();
+    JSONArray findAllProjects();
+
+    JSONObject findCourseProjects();
+
+    JSONArray findNonCourseProjects();
+
+    JSONObject findProjectById();
+
+    JSONArray findProjectsByCourse();
+
+    JSONObject createProject();
+
+    JSONObject updateProject();
+
+    JSONObject deleteProject();
 }

+ 1 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/subsystem/DevcloudService.java

@@ -1,5 +1,6 @@
 package cn.seecoder.seecoderportalserver.service.subsystem;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
 public interface DevcloudService {

+ 1 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/AnnouncementServiceImpl.java

@@ -3,6 +3,7 @@ package cn.seecoder.seecoderportalserver.serviceImpl;
 import cn.seecoder.seecoderportalcommon.vo.*;
 import cn.seecoder.seecoderportalserver.domain.Announcement;
 import cn.seecoder.seecoderportalserver.domain.AnnouncementRecord;
+import cn.seecoder.seecoderportalserver.domain.key.AnnouncementRecordKey;
 import cn.seecoder.seecoderportalserver.mapper.AnnouncementMapper;
 import cn.seecoder.seecoderportalserver.repository.AnnouncementRecordRepository;
 import cn.seecoder.seecoderportalserver.repository.AnnouncementRepository;

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseServiceImpl.java

@@ -1,6 +1,6 @@
 package cn.seecoder.seecoderportalserver.serviceImpl;
 
-import cn.seecoder.seecoderportalcommon.vo.CourseSelectionKey;
+import cn.seecoder.seecoderportalserver.domain.key.CourseSelectionKey;
 import cn.seecoder.seecoderportalcommon.vo.CourseVO;
 import cn.seecoder.seecoderportalcommon.vo.ObjectState;
 import cn.seecoder.seecoderportalcommon.vo.UserVO;

+ 1 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/MessageServiceImpl.java

@@ -4,6 +4,7 @@ import cn.seecoder.seecoderportalcommon.vo.*;
 import cn.seecoder.seecoderportalcommon.vo.dto.CourseMessageDTO;
 import cn.seecoder.seecoderportalserver.domain.Message;
 import cn.seecoder.seecoderportalserver.domain.MessageRecord;
+import cn.seecoder.seecoderportalserver.domain.key.MessageRecordKey;
 import cn.seecoder.seecoderportalserver.mapper.MessageMapper;
 import cn.seecoder.seecoderportalserver.repository.MessageRecordRepository;
 import cn.seecoder.seecoderportalserver.repository.MessageRepository;

+ 55 - 4
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/ProjectServiceImpl.java

@@ -1,19 +1,70 @@
 package cn.seecoder.seecoderportalserver.serviceImpl;
 
+import cn.seecoder.seecoderportalserver.repository.CourseProjectRepository;
 import cn.seecoder.seecoderportalserver.service.ProjectService;
 import cn.seecoder.seecoderportalserver.service.subsystem.DevcloudService;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.springframework.stereotype.Service;
 
 @Service
 public class ProjectServiceImpl implements ProjectService {
     private final DevcloudService devcloudService;
+    private final CourseProjectRepository courseProjectRepository;
 
-    public ProjectServiceImpl(DevcloudService devcloudService) {this.devcloudService = devcloudService;}
+    public ProjectServiceImpl(DevcloudService devcloudService, CourseProjectRepository courseProjectRepository) {
+        this.devcloudService = devcloudService;
+        this.courseProjectRepository = courseProjectRepository;
+    }
+
+    @Override
+    public JSONArray findAllProjects() {
+        JSONObject devcloudResult = devcloudService.findAllProjects();
+        if (devcloudResult.containsKey("code") && devcloudResult.getInteger("code") == 200) {
+            return devcloudResult.getJSONArray("data");
+        } else {
+            throw CustomErrorException.devcloudError(devcloudResult.getString("message"));
+        }
+    }
+
+    @Override
+    public JSONObject findCourseProjects() {
+        JSONArray projectArray = findAllProjects();
+        JSONArray courseProjects = new JSONArray();
+        for (Object project : projectArray) {
+
+        }
+        return null;
+    }
+
+    @Override
+    public JSONArray findNonCourseProjects() {
+        return null;
+    }
+
+    @Override
+    public JSONObject findProjectById() {
+        return null;
+    }
+
+    @Override
+    public JSONArray findProjectsByCourse() {
+        return null;
+    }
+
+    @Override
+    public JSONObject createProject() {
+        return null;
+    }
+
+    @Override
+    public JSONObject updateProject() {
+        return null;
+    }
 
     @Override
-    // todo
-    public JSONObject findAllProjects() {
-        return devcloudService.findAllProjects();
+    public JSONObject deleteProject() {
+        return null;
     }
 }

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseController.java

@@ -1,6 +1,6 @@
 package cn.seecoder.seecoderportalserver.web.rest;
 
-import cn.seecoder.seecoderportalcommon.vo.CourseSelectionKey;
+import cn.seecoder.seecoderportalserver.domain.key.CourseSelectionKey;
 import cn.seecoder.seecoderportalcommon.vo.CourseVO;
 import cn.seecoder.seecoderportalserver.security.SecurityUtils;
 import cn.seecoder.seecoderportalserver.service.CourseService;

+ 48 - 4
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/ProjectController.java

@@ -2,10 +2,10 @@ package cn.seecoder.seecoderportalserver.web.rest;
 
 import cn.seecoder.seecoderportalserver.service.ProjectService;
 import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/api/project")
@@ -14,8 +14,52 @@ public class ProjectController {
 
     public ProjectController(ProjectService projectService) {this.projectService = projectService;}
 
+    @ApiOperation(value = "查找用户所有的Devcloud项目", httpMethod = "GET")
     @GetMapping("/findAll")
-    public OkResponse<JSONObject> findAllProjects(){
+    public OkResponse<JSONArray> findAllProjects() {
         return OkResponse.of(projectService.findAllProjects());
     }
+
+    @ApiOperation(value = "查找用户所有课程Devcloud项目", httpMethod = "GET")
+    @GetMapping("/findCourse")
+    public OkResponse<JSONObject> findCourseProjects() {
+        return OkResponse.of(projectService.findCourseProjects());
+    }
+
+    @ApiOperation(value = "查找用户所有非课程Devcloud项目", httpMethod = "GET")
+    @GetMapping("/findNonCourse")
+    public OkResponse<JSONArray> findNonCourseProjects() {
+        return null;
+    }
+
+    @ApiOperation(value = "根据项目Id查找项目详情", httpMethod = "GET")
+    @GetMapping("/findById")
+    public OkResponse<JSONObject> findProjectById(@RequestParam Long id) {
+        return null;
+    }
+
+    @ApiOperation(value = "根据课程Id查找课程下的项目", httpMethod = "GET")
+    @GetMapping("findByCourse")
+    public OkResponse<JSONArray> findProjectsByCourse(@RequestParam Long courseId) {
+        return null;
+    }
+
+    @ApiOperation(value = "新建项目", httpMethod = "POST")
+    @PostMapping
+    public OkResponse<JSONObject> createProject() {
+        return null;
+    }
+
+    @ApiOperation(value = "修改项目", httpMethod = "PUT")
+    @PutMapping
+    public OkResponse<JSONObject> updateProject() {
+        return null;
+    }
+
+    @ApiOperation(value = "删除项目", httpMethod = "DELETE")
+    @DeleteMapping
+    public OkResponse<JSONObject> deleteProject() {
+        return null;
+    }
+
 }

+ 6 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/errors/CustomErrorException.java

@@ -44,13 +44,17 @@ public class CustomErrorException extends RuntimeException {
 
     public static CustomErrorException announcementNotFound() {return new CustomErrorException("公告不存在");}
 
-    public static CustomErrorException messageNotFound(){return new CustomErrorException("消息不存在");}
+    public static CustomErrorException messageNotFound() {return new CustomErrorException("消息不存在");}
 
     public static CustomErrorException messageTargetNotFound() {return new CustomErrorException("消息目标不存在");}
 
-    public static CustomErrorException announcementRecordNotFound(){
+    public static CustomErrorException announcementRecordNotFound() {
         return new CustomErrorException("公告记录不存在");
     }
 
     public static CustomErrorException messageRecordNotFound() {return new CustomErrorException("消息记录不存在");}
+
+    public static CustomErrorException devcloudError(String info) {
+        return new CustomErrorException("devcloud: " + info);
+    }
 }

+ 0 - 8
seecoder-portal-server/src/main/resources/localData.sql

@@ -1,8 +0,0 @@
--- 用于用于本地做测试的数据
-
--- user
-INSERT INTO public.portal_user (id, created_time, email, is_valid, name, password, phone, photo, role, signature, username) VALUES (1480, '2021-08-26 14:21:25.848000', 'qinliu@nju.edu.cn', true, 'liuqin', '$2a$10$fk2NGp/Dp6VZgtpKJoWM1uDPZgRDQsnw/X/cSCJGHpYm./jVlDlb6', '18001585267', null, 'TEACHER', '无', 'kenny67nju');
-INSERT INTO public.portal_user (id, created_time, email, is_valid, name, password, phone, photo, role, signature, username) VALUES (3117, '2022-02-21 13:21:26.171000', 'm15256072859@163.com', true, 'PortalTestTeacher', '$2a$10$y1kkNo3r2W3PKp4i.n64TeJz2Uj38r5ShahFh/3wRugFm27wz9eBe', '13382405535', null, 'TEACHER', '无', 'PortalTestTeacher-username');
-INSERT INTO public.portal_user (id, created_time, email, is_valid, name, password, phone, photo, role, signature, username) VALUES (3187, '2022-04-13 08:29:20.874000', '2570235928@qq.com', true, 'StudentWZX ', '$2a$10$4g2YNGEMgMJlY8YSVLZfh.GEdEiyKVpFdABfMwYHi0Sdow87z7PnS', '13704400822', null, 'STUDENT ', '无        ', 'StudentWZX');
--- course
-INSERT INTO public.course (id, coder_id, created_time, description, end_time, eval_id, helper_id, image_url, invitation_code, mooc_url, name, price, semester, start_time, state, teacher_id) VALUES (4, 26, '2022-04-15 04:13:53.596', '开放课程,面向所有网站用户。', '2022-05-30 16:00:00', 1, NULL, NULL, 'OpenCourse', NULL, '开放课程', 0, '2022春', '2022-03-31 16:00:00', 'EXAMPLE', 1480);

+ 515 - 0
seecoder-portal-server/src/main/resources/portal.sql

@@ -0,0 +1,515 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 13.4
+-- Dumped by pg_dump version 13.4
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+SET default_tablespace = '';
+
+SET default_table_access_method = heap;
+
+--
+-- Name: announcement; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.announcement(
+    id bigint NOT NULL,
+    content character varying(255) NOT NULL,
+    course_id bigint NOT NULL,
+    created_at timestamp without time zone NOT NULL,
+    sender_id bigint NOT NULL,
+    state character varying(255) NOT NULL,
+    title character varying(255) NOT NULL,
+    type integer NOT NULL
+);
+
+
+ALTER TABLE public.announcement OWNER TO postgres;
+
+--
+-- Name: announcement_record; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.announcement_record (
+    announcement_id bigint NOT NULL,
+    recipient_id bigint NOT NULL,
+    created_at timestamp without time zone NOT NULL,
+    read_at timestamp without time zone,
+    state boolean NOT NULL
+);
+
+
+ALTER TABLE public.announcement_record OWNER TO postgres;
+
+--
+-- Name: course; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.course (
+    id bigint NOT NULL,
+    coder_id integer,
+    created_time timestamp without time zone NOT NULL,
+    description character varying(255) NOT NULL,
+    end_time timestamp without time zone NOT NULL,
+    eval_id integer,
+    helper_id bigint,
+    image_url character varying(255),
+    invitation_code character varying(255) NOT NULL,
+    mooc_url character varying(255),
+    name character varying(255) NOT NULL,
+    price double precision NOT NULL,
+    semester character varying(255) NOT NULL,
+    start_time timestamp without time zone NOT NULL,
+    state character varying(255) NOT NULL,
+    teacher_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.course OWNER TO postgres;
+
+--
+-- Name: course_generation; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.course_generation (
+    pk_course_id_name character varying(255) NOT NULL,
+    pk_course_id_value bigint
+);
+
+
+ALTER TABLE public.course_generation OWNER TO postgres;
+
+--
+-- Name: course_selection; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.course_selection (
+    course_id bigint NOT NULL,
+    user_id bigint NOT NULL,
+    state boolean NOT NULL
+);
+
+
+ALTER TABLE public.course_selection OWNER TO postgres;
+
+--
+-- Name: filled_info; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.filled_info (
+    id bigint NOT NULL,
+    filled integer,
+    phone character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.filled_info OWNER TO postgres;
+
+--
+-- Name: hibernate_sequence; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE public.hibernate_sequence
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+ALTER TABLE public.hibernate_sequence OWNER TO postgres;
+
+--
+-- Name: message; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.message (
+    id bigint NOT NULL,
+    action_type character varying(255) NOT NULL,
+    content character varying(255) NOT NULL,
+    created_at timestamp without time zone NOT NULL,
+    mnt_id bigint NOT NULL,
+    sender_id bigint NOT NULL,
+    state character varying(255) NOT NULL,
+    target_id bigint NOT NULL,
+    target_type character varying(255) NOT NULL
+);
+
+
+ALTER TABLE public.message OWNER TO postgres;
+
+--
+-- Name: message_record; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.message_record (
+    message_id bigint NOT NULL,
+    recipient_id bigint NOT NULL,
+    created_at timestamp without time zone NOT NULL,
+    read_at timestamp without time zone,
+    state boolean NOT NULL
+);
+
+
+ALTER TABLE public.message_record OWNER TO postgres;
+
+--
+-- Name: phone_verification; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.phone_verification (
+    id bigint NOT NULL,
+    code character varying(64) NOT NULL,
+    code_time timestamp without time zone,
+    phone character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.phone_verification OWNER TO postgres;
+
+--
+-- Name: portal_user; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.portal_user (
+    id bigint NOT NULL,
+    created_time timestamp without time zone,
+    email character varying(512),
+    is_valid boolean,
+    name character varying(64),
+    password character varying(512) NOT NULL,
+    phone character varying(64) NOT NULL,
+    photo character varying(512),
+    role character varying(255) NOT NULL,
+    signature character varying(512),
+    username character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.portal_user OWNER TO postgres;
+
+--
+-- Name: super; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.super (
+    id bigint NOT NULL,
+    certificate character varying(512),
+    created_time timestamp without time zone NOT NULL,
+    job_number character varying(64) NOT NULL,
+    organization character varying(64) NOT NULL,
+    real_name character varying(64) NOT NULL,
+    role integer NOT NULL,
+    state character varying(255) NOT NULL,
+    uid bigint NOT NULL
+);
+
+
+ALTER TABLE public.super OWNER TO postgres;
+
+--
+-- Name: user_generation; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE IF NOT EXISTS public.user_generation (
+    pk_user_id_name character varying(255) NOT NULL,
+    pk_user_id_value bigint
+);
+
+
+ALTER TABLE public.user_generation OWNER TO postgres;
+
+--
+-- Name: announcement announcement_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement
+    ADD CONSTRAINT announcement_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: announcement_record announcement_record_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement_record
+    ADD CONSTRAINT announcement_record_pkey PRIMARY KEY (announcement_id, recipient_id);
+
+
+--
+-- Name: course_generation course_generation_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course_generation
+    ADD CONSTRAINT course_generation_pkey PRIMARY KEY (pk_course_id_name);
+
+
+--
+-- Name: course course_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT course_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: course_selection course_selection_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course_selection
+    ADD CONSTRAINT course_selection_pkey PRIMARY KEY (course_id, user_id);
+
+
+--
+-- Name: filled_info filled_info_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.filled_info
+    ADD CONSTRAINT filled_info_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: message message_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.message
+    ADD CONSTRAINT message_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: message_record message_record_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.message_record
+    ADD CONSTRAINT message_record_pkey PRIMARY KEY (message_id, recipient_id);
+
+
+--
+-- Name: phone_verification phone_verification_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.phone_verification
+    ADD CONSTRAINT phone_verification_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: portal_user portal_user_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.portal_user
+    ADD CONSTRAINT portal_user_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: super super_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.super
+    ADD CONSTRAINT super_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: phone_verification uk_1ebndp9bn7nuiyqujcmeifojg; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.phone_verification
+    ADD CONSTRAINT uk_1ebndp9bn7nuiyqujcmeifojg UNIQUE (phone);
+
+
+--
+-- Name: course uk_4xqvdpkafb91tt3hsb67ga3fj; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT uk_4xqvdpkafb91tt3hsb67ga3fj UNIQUE (name);
+
+
+--
+-- Name: filled_info uk_66l7r4p268ua5cdhp06luoni5; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.filled_info
+    ADD CONSTRAINT uk_66l7r4p268ua5cdhp06luoni5 UNIQUE (phone);
+
+
+--
+-- Name: portal_user uk_86nctyu9don6c0ja9n2nnpudy; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.portal_user
+    ADD CONSTRAINT uk_86nctyu9don6c0ja9n2nnpudy UNIQUE (phone);
+
+
+--
+-- Name: portal_user uk_9vbggjygrxxob1bwqarsen47l; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.portal_user
+    ADD CONSTRAINT uk_9vbggjygrxxob1bwqarsen47l UNIQUE (name);
+
+
+--
+-- Name: portal_user uk_lasdi4ow5ujm6tmww2rfviwbk; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.portal_user
+    ADD CONSTRAINT uk_lasdi4ow5ujm6tmww2rfviwbk UNIQUE (username);
+
+
+--
+-- Name: course uk_oh8yv6gdqu1nonas8bf9666if; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT uk_oh8yv6gdqu1nonas8bf9666if UNIQUE (coder_id);
+
+
+--
+-- Name: course uk_rsy0nmfm5erp14m7suwbnna07; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT uk_rsy0nmfm5erp14m7suwbnna07 UNIQUE (eval_id);
+
+
+--
+-- Name: course uk_s56iq6sjdp4tx9g89efphd7uo; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT uk_s56iq6sjdp4tx9g89efphd7uo UNIQUE (invitation_code);
+
+
+--
+-- Name: course uk_totwnh6y5qe9axhrns6jgrlf; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT uk_totwnh6y5qe9axhrns6jgrlf UNIQUE (helper_id);
+
+
+--
+-- Name: user_generation user_generation_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.user_generation
+    ADD CONSTRAINT user_generation_pkey PRIMARY KEY (pk_user_id_name);
+
+
+--
+-- Name: user_phone_index; Type: INDEX; Schema: public; Owner: postgres
+--
+
+CREATE INDEX user_phone_index ON public.portal_user USING btree (phone);
+
+
+--
+-- Name: verification_phone_index; Type: INDEX; Schema: public; Owner: postgres
+--
+
+CREATE INDEX verification_phone_index ON public.phone_verification USING btree (phone);
+
+
+--
+-- Name: announcement announcement_course_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement
+    ADD CONSTRAINT announcement_course_id_fk FOREIGN KEY (course_id) REFERENCES public.course(id) ON DELETE CASCADE;
+
+
+--
+-- Name: announcement announcement_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement
+    ADD CONSTRAINT announcement_portal_user_id_fk FOREIGN KEY (sender_id) REFERENCES public.portal_user(id) ON DELETE CASCADE;
+
+
+--
+-- Name: announcement_record announcement_record_announcement_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement_record
+    ADD CONSTRAINT announcement_record_announcement_id_fk FOREIGN KEY (announcement_id) REFERENCES public.announcement(id) ON DELETE CASCADE;
+
+
+--
+-- Name: announcement_record announcement_record_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.announcement_record
+    ADD CONSTRAINT announcement_record_portal_user_id_fk FOREIGN KEY (announcement_id) REFERENCES public.portal_user(id) ON DELETE CASCADE;
+
+
+--
+-- Name: course course_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course
+    ADD CONSTRAINT course_portal_user_id_fk FOREIGN KEY (teacher_id) REFERENCES public.portal_user(id) ON DELETE RESTRICT;
+
+
+--
+-- Name: course_selection course_selection_course_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course_selection
+    ADD CONSTRAINT course_selection_course_id_fk FOREIGN KEY (course_id) REFERENCES public.course(id) ON DELETE CASCADE;
+
+
+--
+-- Name: course_selection course_selection_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.course_selection
+    ADD CONSTRAINT course_selection_portal_user_id_fk FOREIGN KEY (user_id) REFERENCES public.portal_user(id) ON DELETE CASCADE;
+
+
+--
+-- Name: super fkkm5iyxbchlm1hjhs7tyqi6knh; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.super
+    ADD CONSTRAINT fkkm5iyxbchlm1hjhs7tyqi6knh FOREIGN KEY (uid) REFERENCES public.portal_user(id);
+
+
+--
+-- Name: message message_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.message
+    ADD CONSTRAINT message_portal_user_id_fk FOREIGN KEY (sender_id) REFERENCES public.portal_user(id) ON DELETE CASCADE;
+
+
+--
+-- Name: message_record message_record_message_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.message_record
+    ADD CONSTRAINT message_record_message_id_fk FOREIGN KEY (message_id) REFERENCES public.message(id) ON DELETE CASCADE;
+
+
+--
+-- Name: message_record message_record_portal_user_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+--
+
+ALTER TABLE ONLY public.message_record
+    ADD CONSTRAINT message_record_portal_user_id_fk FOREIGN KEY (recipient_id) REFERENCES public.portal_user(id) ON DELETE CASCADE;
+
+
+--
+-- PostgreSQL database dump complete
+--
+

+ 0 - 55
seecoder-portal-server/src/main/resources/set_fk.sql

@@ -1,55 +0,0 @@
--- announcement
-alter table announcement
-    add constraint announcement___fk_course
-        foreign key (course_id) references course
-            on update restrict on delete restrict;
-
-alter table announcement
-    add constraint announcement___fk_sender
-        foreign key (sender_id) references portal_user
-            on update restrict on delete restrict;
-
--- announcement-record
-alter table announcement_record
-    add constraint announcement_record___fk_announcement
-        foreign key (announcement_id) references announcement
-            on update restrict on delete restrict;
-
-alter table announcement_record
-    add constraint announcement_record_portal_user_id_fk
-        foreign key (recipient_id) references portal_user
-            on update restrict on delete restrict;
-
--- course
-alter table course
-    add constraint course___fk_teacher
-        foreign key (teacher_id) references portal_user
-            on update restrict on delete restrict;
-
--- course_selection
-alter table course_selection
-    add constraint course_selection___fk_course
-        foreign key (course_id) references course
-            on update restrict on delete restrict;
-
-alter table course_selection
-    add constraint course_selection___fk_user
-        foreign key (user_id) references portal_user
-            on update restrict on delete restrict;
-
--- message
-alter table message
-    add constraint message___fk_sender
-        foreign key (sender_id) references portal_user
-            on update restrict on delete restrict;
-
--- message_record
-alter table message_record
-    add constraint message_record___fk_message
-        foreign key (message_id) references message
-            on update restrict on delete restrict;
-
-alter table message_record
-    add constraint message_record___fk_user
-        foreign key (recipient_id) references portal_user
-            on update restrict on delete restrict;