diff --git a/.gitignore b/.gitignore index f23b948..c8d2364 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -*.jar \ No newline at end of file +*.jar +.npm/* diff --git a/back-end b/back-end index 1f3a034..17fca2d 160000 --- a/back-end +++ b/back-end @@ -1 +1 @@ -Subproject commit 1f3a034503b395460c7f9c9cfb33795c51ab7833 +Subproject commit 17fca2d8bf2a90812b141a38cb6762c50535d4cb diff --git a/deploy/back-only/db-init/db-init.sql b/deploy/back-only/db-init/db-init.sql index 226f1cb..c302e10 100644 --- a/deploy/back-only/db-init/db-init.sql +++ b/deploy/back-only/db-init/db-init.sql @@ -33,6 +33,7 @@ CREATE TABLE Courses ( c_semester varchar(10) NOT NULL, -- "spring", "fall", "summer", "both" c_credit decimal(4,2) NOT NULL, c_degree int NOT NULL, -- 0, + c_category varchar(15) NOT NULL, -- "public", "specialized" c_status int NOT NULL, -- 0 = "unverified", 1 = "verified" PRIMARY KEY(c_course_id), @@ -81,14 +82,14 @@ VALUES ('莱布尼茨第 128 代传人', 'teacher_3@mails.ucas.ac.cn'); INSERT INTO teachers (c_teacher_name, c_teacher_email) VALUES ('等于是', 'teacher_4@mails.ucas.ac.cn'); -INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_status) -VALUES ('B0911011Y', '02', '操作系统研讨课', 4, 'autumn', 2.0, 0, 1); -INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_status) -VALUES ('B0912024Y', null, '计算机网络', 1, 'autumn', 3.0, 0, 1); -INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_status) -VALUES ('B0911002Y', '01', '数据结构', 2, 'spring', 3.0, 0, 1); -INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_status) -VALUES ('B????????', null, '一个未审核通过的课程', 1, 'spring', 3.0, 0, 0); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0911011Y', '02', '操作系统研讨课', 4, 'autumn', 2.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0912024Y', null, '计算机网络', 1, 'autumn', 3.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0911002Y', '01', '数据结构', 2, 'spring', 3.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B????????', null, '一个未审核通过的课程', 1, 'spring', 3.0, 0, 'specialized', 0); INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) diff --git a/deploy/back-only/docker-compose.template b/deploy/back-only/docker-compose.template index 433516c..e907c07 100644 --- a/deploy/back-only/docker-compose.template +++ b/deploy/back-only/docker-compose.template @@ -20,4 +20,5 @@ services: environment: - POSTGRES_PASSWORD=112233445566 - POSTGRES_DB=gkd_rate_it_test - command: [ "postgres" ] \ No newline at end of file + command: [ "postgres" ] + diff --git a/deploy/back-only/proxy/nginx.conf b/deploy/back-only/proxy/nginx.conf new file mode 100644 index 0000000..5470dd6 --- /dev/null +++ b/deploy/back-only/proxy/nginx.conf @@ -0,0 +1,84 @@ + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + server { + listen 80; + server_name rateit.com; + + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Credentials "true"; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,XRequested-With'; + + + location ~ /back/ { + proxy_pass http://127.0.0.1:8080; + } + location ~ /front/ { + proxy_pass http://127.0.0.1:3000; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + # error_page 500 502 503 504 /50x.html; + # location = /50x.html { + # root html; + # } + + } + + + # HTTPS server + + # server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # proxy_pass http://127.0.0.1:8081; + # } + # } + +} diff --git a/deploy/back-only/run.ps1 b/deploy/back-only/run.ps1 index c2622a7..2321ee8 100644 --- a/deploy/back-only/run.ps1 +++ b/deploy/back-only/run.ps1 @@ -1,11 +1,15 @@ $Self = Split-Path -Parent $MyInvocation.MyCommand.Source # Write-Output $Self +$Workspace = $(Get-Item $Self).Parent.Parent.FullName -$Workspace = $(Get-Item $Self).Parent.Parent +Push-Location $Workspace\back-end -Push-Location $Workspace/back-end +./gradlew.bat wrapper -./gradlew.bat wrapper && ./gradlew.bat shadowJar +if ($?) +{ + ./gradlew.bat shadowJar +} Pop-Location @@ -18,8 +22,10 @@ $ComposeYml = (Get-Content $Self/docker-compose.template). replace("__WEB_SRC", "$Self\\app"). replace("__JAR_NAME", "$JarName"). replace( "__DB_INIT", "$Self\\db-init") +replace( "__NGINX_CONF", "$Self\\proxy\\nginx.conf") # Write-Output $ComposeYml $TmpFile = New-TemporaryFile -$ComposeYml | Out-File -Path $TmpFile.FullName +# Write-Output $TmpFile +$ComposeYml | Out-File $TmpFile.FullName docker.exe compose --file $TmpFile.FullName up docker.exe compose --file $TmpFile.FullName rm -fsv \ No newline at end of file diff --git a/deploy/back-only/run.sh b/deploy/back-only/run.sh index 1534d60..4f1126e 100644 --- a/deploy/back-only/run.sh +++ b/deploy/back-only/run.sh @@ -6,6 +6,7 @@ workspace=$(dirname $(dirname $self)) pushd $workspace/back-end + ./gradlew wrapper && \ ./gradlew shadowJar @@ -15,7 +16,28 @@ cp $workspace/back-end/build/libs/*-shadow.jar $self/app jar_name=$(ls $self/app | grep jar) -compose_yml=$(cat $self/docker-compose.template | sed "s|__WEB_SRC|$self/app|" | sed "s/__JAR_NAME/$jar_name/" | sed "s|__DB_INIT|$self/db-init|") +compose_yml=$(cat $self/docker-compose.template | sed "s|__WEB_SRC|$self/app|" | sed "s/__JAR_NAME/$jar_name/" | sed "s|__DB_INIT|$self/db-init|"| sed "s|__NGINX_CONF|$self/proxy/nginx.conf|") echo "$compose_yml" | docker compose --file /dev/stdin up echo "$compose_yml" | docker compose --file /dev/stdin rm -fsv + +# nginx: +# image: nginx +# volumes: +# - type: bind +# source: __NGINX_CONF +# target: /etc/nginx/ +# command: [ "nginx" ] + +# web: +# image: openjdk:17-slim-bullseye +# ports: +# - "8080:8080" +# depends_on: +# - database +# working_dir: /app +# volumes: +# - type: bind +# source: __WEB_SRC +# target: /app +# command: [ "java", "-jar", "__JAR_NAME" ] \ No newline at end of file diff --git a/deploy/complete/app/config.json b/deploy/complete/app/config.json new file mode 100644 index 0000000..b034b7c --- /dev/null +++ b/deploy/complete/app/config.json @@ -0,0 +1,11 @@ +{ + "port": 8080, + "signSecret": "test_secret_gkd_rate_it", + "maintainerEmailAddr": "???", + "maintainerEmailPassword": "???", + "maintainerEmailSmtpHostName": "smtp-mail.outlook.com", + "maintainerEmailSmtpHostPort": 587, + "databaseURL": "jdbc:postgresql://database:5432/gkd_rate_it_test", + "databaseUser": "postgres", + "databasePassword": "112233445566" + } \ No newline at end of file diff --git a/deploy/complete/build_from_src.ps1 b/deploy/complete/build_from_src.ps1 new file mode 100644 index 0000000..a682b58 --- /dev/null +++ b/deploy/complete/build_from_src.ps1 @@ -0,0 +1,36 @@ +$Self = Split-Path -Parent $MyInvocation.MyCommand.Source +# Write-Output $Self +$Workspace = $(Get-Item $Self).Parent.Parent.FullName + +Push-Location $Workspace\front-end +npm ci --cache .npm +if ($?){ + npm run build +} +Pop-Location + +# Push-Location $Workspace\back-end + +# ./gradlew.bat wrapper + +# if ($?){ +# ./gradlew.bat shadowJar +# } + +# Pop-Location + +# Copy-Item $Workspace\\back-end\\build\\libs\\*-shadow.jar $Self\\app + +# $JarName = (Get-ChildItem -Path $Self\app\* -Include "*.jar")[0].Name +# # Write-Output $JarName + +# $ComposeYml = (Get-Content $Self/docker-compose.template). +# replace("__WEB_SRC", "$Self\\app"). +# replace("__JAR_NAME", "$JarName"). +# replace( "__DB_INIT", "$Self\\db-init") +# # Write-Output $ComposeYml +# $TmpFile = New-TemporaryFile +# # Write-Output $TmpFile +# $ComposeYml | Out-File $TmpFile.FullName +# docker.exe compose --file $TmpFile.FullName up +# docker.exe compose --file $TmpFile.FullName rm -fsv \ No newline at end of file diff --git a/deploy/complete/build_from_src.sh b/deploy/complete/build_from_src.sh index c306399..9f59724 100644 --- a/deploy/complete/build_from_src.sh +++ b/deploy/complete/build_from_src.sh @@ -5,12 +5,25 @@ self="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" workspace=$(dirname $(dirname $self)) # echo $workspace +# nohup $workspace/deploy/back-only/run.sh & -cd $workspace/front-end && \ -npm ci && \ -npm run build +# cd $workspace/back-end && \ +# ./gradlew wrapper && \ +# ./gradlew shadowJar -cd $workspace/back-end && \ -./gradlew wrapper && \ -./gradlew shadowJar +# cp $workspace/back-end/build/libs/*-shadow.jar $self/app + +# cd $workspace/front-end && \ +# # npm ci --cache .npm && \ +# npm run build +# # npm run preview +# # npm run dev + +jar_name=$(ls $self/app | grep jar) + +compose_yml=$(cat $self/docker-compose.template | sed "s|__WEB_SRC|$self/app|" | sed "s/__JAR_NAME/$jar_name/" | sed "s|__DB_INIT|$self/db-init|"| sed "s|__DIST_SRC|$workspace/front-end/dist|"| sed "s|__NGINX_CONF|$self/proxy/nginx.conf|") + +# echo "$compose_yml" +echo "$compose_yml" | docker compose --file /dev/stdin up +# echo "$compose_yml" | docker compose --file /dev/stdin rm -fsv diff --git a/deploy/complete/db-init/db-init.sql b/deploy/complete/db-init/db-init.sql new file mode 100644 index 0000000..c302e10 --- /dev/null +++ b/deploy/complete/db-init/db-init.sql @@ -0,0 +1,189 @@ +-- Teachers +CREATE TABLE Teachers ( + t_teacher_id serial NOT NULL, + c_teacher_name varchar(50) NOT NULL, + c_teacher_email varchar(70) , + + PRIMARY KEY(t_teacher_id) +); + + +-- Users(students) +CREATE TABLE Users ( + u_user_id serial NOT NULL, + u_user_email varchar(70) NOT NULL, + u_user_hashed_passwd varchar(256) NOT NULL, + u_user_nickname varchar(20) NOT NULL, + u_user_start_year varchar(10) NOT NULL, + u_user_group varchar(20) NOT NULL, -- "default", "maintainer", "admin" + + PRIMARY KEY(u_user_id), + UNIQUE(u_user_email) +); + + +-- Courses +CREATE TABLE Courses ( + c_course_id serial NOT NULL, + -- 课程编号示例: 线性代数I-A(03)/ B01GB001Y-A03 + c_course_code char(9) NOT NULL, -- B01GB001Y + c_course_code_seq varchar(5) , -- A + c_course_name varchar(30) NOT NULL, + c_teacher_id int NOT NULL, + c_semester varchar(10) NOT NULL, -- "spring", "fall", "summer", "both" + c_credit decimal(4,2) NOT NULL, + c_degree int NOT NULL, -- 0, + c_category varchar(15) NOT NULL, -- "public", "specialized" + c_status int NOT NULL, -- 0 = "unverified", 1 = "verified" + + PRIMARY KEY(c_course_id), + FOREIGN KEY(c_teacher_id) REFERENCES Teachers(t_teacher_id), + UNIQUE (c_course_code, c_course_code_seq, c_teacher_id) +); + +-- Reviews +CREATE TABLE Reviews ( + -- info, id check + r_review_id serial NOT NULL, + r_course_id int NOT NULL, + r_user_id int NOT NULL, + -- rating issue + r_create_time timestamp NOT NULL, + r_last_update_time timestamp NOT NULL, + r_overall_rec int NOT NULL, -- 0,1,2 + r_rate_quality int NOT NULL, -- 0-5 + r_rate_difficulty int NOT NULL, -- 0-5 + r_rate_workload int NOT NULL, -- 0-5 + r_comment_text text NOT NULL, + r_my_grade varchar(10) , + r_my_major int , + + PRIMARY KEY(r_review_id), + FOREIGN KEY(r_course_id) REFERENCES Courses(c_course_id), + FOREIGN KEY(r_user_id) REFERENCES Users(u_user_id) +); + +-- Add some fake data +INSERT INTO users (u_user_email, u_user_hashed_passwd, u_user_nickname, u_user_start_year, u_user_group) +VALUES ('test_1@mails.ucas.ac.cn', '48690', 'TEST_USER_1', '2020', 'default'); +INSERT INTO users (u_user_email, u_user_hashed_passwd, u_user_nickname, u_user_start_year, u_user_group) +VALUES ('test_2@mails.ucas.ac.cn', '48690', 'TEST_USER_2', '2020', 'default'); +INSERT INTO users (u_user_email, u_user_hashed_passwd, u_user_nickname, u_user_start_year, u_user_group) +VALUES ('test_3@mails.ucas.ac.cn', '48690', '一个有中文名的用户', '2020', 'default'); +INSERT INTO users (u_user_email, u_user_hashed_passwd, u_user_nickname, u_user_start_year, u_user_group) +VALUES ('test_4@mails.ucas.ac.cn', '48690', '另一个有中文名的用户', '2020', 'default'); + +INSERT INTO teachers (c_teacher_name, c_teacher_email) +VALUES ('Tony', 'teacher_1@mails.ucas.ac.cn'); +INSERT INTO teachers (c_teacher_name, c_teacher_email) +VALUES ('从某种意义上讲', 'teacher_2@mails.ucas.ac.cn'); +INSERT INTO teachers (c_teacher_name, c_teacher_email) +VALUES ('莱布尼茨第 128 代传人', 'teacher_3@mails.ucas.ac.cn'); +INSERT INTO teachers (c_teacher_name, c_teacher_email) +VALUES ('等于是', 'teacher_4@mails.ucas.ac.cn'); + +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0911011Y', '02', '操作系统研讨课', 4, 'autumn', 2.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0912024Y', null, '计算机网络', 1, 'autumn', 3.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B0911002Y', '01', '数据结构', 2, 'spring', 3.0, 0, 'specialized', 1); +INSERT INTO courses (c_course_code, c_course_code_seq, c_course_name, c_teacher_id, c_semester, c_credit, c_degree, c_category, c_status) +VALUES ('B????????', null, '一个未审核通过的课程', 1, 'spring', 3.0, 0, 'specialized', 0); + +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 1, current_timestamp, current_timestamp, 1, 1, 2, 5, '呜呜呜呜👴最喜欢这个课了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 2, current_timestamp, current_timestamp, 2, 5, 1, 4, '等于是典型的等于是了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 3, current_timestamp, current_timestamp, 5, 5, 3, 2, '我哭死', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 4, current_timestamp, current_timestamp, 2, 3, 1, 4, '从某种意义上讲这可真的是太有意义了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 1, current_timestamp, current_timestamp, 4, 3, 4, 2, '😘🤦‍♂️💕🤷‍♂️🤷‍♀️😁🤷‍♂️🤣🤣😉😂😘😉🙂😗😗', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 2, current_timestamp, current_timestamp, 3, 3, 4, 2, '(┬┬﹏┬┬)☆*: .。. o(≧▽≦)o .。.:*☆(┬┬﹏┬┬)ψ(`∇´)ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 3, current_timestamp, current_timestamp, 4, 2, 2, 2, '(┬┬﹏┬┬)ψ(`∇´)(づ ̄3 ̄)づ╭❤️~( ̄o ̄) . z Z(o-ωq)).oO 困ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (1, 4, current_timestamp, current_timestamp, 4, 2, 2, 2, '1111111', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 1, current_timestamp, current_timestamp, 1, 1, 2, 5, '呜呜呜呜👴最喜欢这个课了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 2, current_timestamp, current_timestamp, 2, 5, 1, 4, '等于是典型的等于是了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 3, current_timestamp, current_timestamp, 5, 5, 3, 2, '我哭死', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 4, current_timestamp, current_timestamp, 2, 3, 1, 4, '从某种意义上讲这可真的是太有意义了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 1, current_timestamp, current_timestamp, 4, 3, 4, 2, '😘🤦‍♂️💕🤷‍♂️🤷‍♀️😁🤷‍♂️🤣🤣😉😂😘😉🙂😗😗', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 2, current_timestamp, current_timestamp, 3, 3, 4, 2, '(┬┬﹏┬┬)☆*: .。. o(≧▽≦)o .。.:*☆(┬┬﹏┬┬)ψ(`∇´)ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 3, current_timestamp, current_timestamp, 4, 2, 2, 2, '(┬┬﹏┬┬)ψ(`∇´)(づ ̄3 ̄)づ╭❤️~( ̄o ̄) . z Z(o-ωq)).oO 困ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (2, 4, current_timestamp, current_timestamp, 4, 2, 2, 2, '1111111', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 1, current_timestamp, current_timestamp, 1, 1, 2, 5, '呜呜呜呜👴最喜欢这个课了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 2, current_timestamp, current_timestamp, 2, 5, 1, 4, '等于是典型的等于是了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 3, current_timestamp, current_timestamp, 5, 5, 3, 2, '我哭死', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 4, current_timestamp, current_timestamp, 2, 3, 1, 4, '从某种意义上讲这可真的是太有意义了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 1, current_timestamp, current_timestamp, 4, 3, 4, 2, '😘🤦‍♂️💕🤷‍♂️🤷‍♀️😁🤷‍♂️🤣🤣😉😂😘😉🙂😗😗', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 2, current_timestamp, current_timestamp, 3, 3, 4, 2, '(┬┬﹏┬┬)☆*: .。. o(≧▽≦)o .。.:*☆(┬┬﹏┬┬)ψ(`∇´)ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 3, current_timestamp, current_timestamp, 4, 2, 2, 2, '(┬┬﹏┬┬)ψ(`∇´)(づ ̄3 ̄)づ╭❤️~( ̄o ̄) . z Z(o-ωq)).oO 困ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (3, 4, current_timestamp, current_timestamp, 4, 2, 2, 2, '1111111', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 1, current_timestamp, current_timestamp, 1, 1, 2, 5, '呜呜呜呜👴最喜欢这个课了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 2, current_timestamp, current_timestamp, 2, 5, 1, 4, '等于是典型的等于是了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 3, current_timestamp, current_timestamp, 5, 5, 3, 2, '我哭死', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 4, current_timestamp, current_timestamp, 2, 3, 1, 4, '从某种意义上讲这可真的是太有意义了', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 1, current_timestamp, current_timestamp, 4, 3, 4, 2, '😘🤦‍♂️💕🤷‍♂️🤷‍♀️😁🤷‍♂️🤣🤣😉😂😘😉🙂😗😗', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 2, current_timestamp, current_timestamp, 3, 3, 4, 2, '(┬┬﹏┬┬)☆*: .。. o(≧▽≦)o .。.:*☆(┬┬﹏┬┬)ψ(`∇´)ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 3, current_timestamp, current_timestamp, 4, 2, 2, 2, '(┬┬﹏┬┬)ψ(`∇´)(づ ̄3 ̄)づ╭❤️~( ̄o ̄) . z Z(o-ωq)).oO 困ψ( ̄︶ ̄)↗ <( ̄︶ ̄)↗[GO!]', null, 0); +INSERT INTO reviews (r_course_id, r_user_id, r_create_time, r_last_update_time, r_overall_rec, r_rate_quality, + r_rate_difficulty, r_rate_workload, r_comment_text, r_my_grade, r_my_major) +VALUES (4, 4, current_timestamp, current_timestamp, 4, 2, 2, 2, '1111111', null, 0); \ No newline at end of file diff --git a/deploy/complete/docker-compose.template b/deploy/complete/docker-compose.template new file mode 100644 index 0000000..98eca10 --- /dev/null +++ b/deploy/complete/docker-compose.template @@ -0,0 +1,32 @@ +services: + web: + image: openjdk:17-slim-bullseye + ports: + - "8080:8080" + depends_on: + - database + working_dir: /app + volumes: + - type: bind + source: __WEB_SRC + target: /app + command: [ "java", "-jar", "__JAR_NAME" ] + database: + image: postgres:14.5-bullseye + volumes: + - type: bind + source: __DB_INIT + target: /docker-entrypoint-initdb.d + environment: + - POSTGRES_PASSWORD=112233445566 + - POSTGRES_DB=gkd_rate_it_test + command: [ "postgres" ] + nginx: + image: nginx + working_dir: /app + ports: + - target: 80 + published: 80 + volumes: + - __DIST_SRC:/app + - __NGINX_CONF:/etc/nginx/nginx.conf diff --git a/deploy/complete/proxy/nginx.conf b/deploy/complete/proxy/nginx.conf new file mode 100644 index 0000000..707b542 --- /dev/null +++ b/deploy/complete/proxy/nginx.conf @@ -0,0 +1,86 @@ + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + server { + listen 80; + server_name localhost; + + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Credentials "true"; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,XRequested-With'; + + + location /back/ { + proxy_pass http://172.19.0.1:8080/; + } + location / { + root /app; + index index.html + # proxy_pass http://127.0.0.1:3000/; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + # error_page 500 502 503 504 /50x.html; + # location = /50x.html { + # root html; + # } + + } + + + # HTTPS server + + # server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # proxy_pass http://127.0.0.1:8081; + # } + # } + +} diff --git a/front-end b/front-end index cf1f402..49a5417 160000 --- a/front-end +++ b/front-end @@ -1 +1 @@ -Subproject commit cf1f402ee52661ed89ef65e3e3eb179cf7fb2d1e +Subproject commit 49a541743356a1dd18bc9b031f038d3bf3fba877