mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-07-16 17:48:49 +02:00
feat:#34 refactored function to intended service, fixed docker files
This commit is contained in:
@ -33,33 +33,60 @@ lint-frontend:
|
|||||||
- npm i
|
- npm i
|
||||||
- npm run lint-no-fix
|
- npm run lint-no-fix
|
||||||
|
|
||||||
lint-backend:
|
lint-data-manager:
|
||||||
stage: lint
|
stage: lint
|
||||||
image: golangci/golangci-lint:latest
|
image: golangci/golangci-lint:latest
|
||||||
rules:
|
rules:
|
||||||
- changes:
|
- changes:
|
||||||
- backend/**/*
|
- services/data-manager/**/*
|
||||||
script:
|
script:
|
||||||
- cd backend
|
- cd services/data-manager
|
||||||
|
- go mod download
|
||||||
|
- golangci-lint --version
|
||||||
|
- golangci-lint run -v --skip-dirs=migrations --timeout=5m
|
||||||
|
|
||||||
|
lint-ical:
|
||||||
|
stage: lint
|
||||||
|
image: golangci/golangci-lint:latest
|
||||||
|
rules:
|
||||||
|
- changes:
|
||||||
|
- services/ical/**/*
|
||||||
|
script:
|
||||||
|
- cd services/ical
|
||||||
- go mod download
|
- go mod download
|
||||||
- golangci-lint --version
|
- golangci-lint --version
|
||||||
- golangci-lint run -v --skip-dirs=migrations --timeout=5m
|
- golangci-lint run -v --skip-dirs=migrations --timeout=5m
|
||||||
|
|
||||||
|
|
||||||
build-backend:
|
build-data-manager:
|
||||||
image: golang:alpine
|
image: golang:alpine
|
||||||
stage: build
|
stage: build
|
||||||
rules:
|
rules:
|
||||||
- changes:
|
- changes:
|
||||||
- backend/**/*
|
- services/data-manager/**/*
|
||||||
script:
|
script:
|
||||||
- cd backend
|
- cd services/data-manager
|
||||||
- go build -o htwkalender
|
- go build -o htwkalender
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- backend/htwkalender
|
- data-manager/htwkalender
|
||||||
- backend/go.sum
|
- data-manager/go.sum
|
||||||
- backend/go.mod
|
- data-manager/go.mod
|
||||||
|
|
||||||
|
build-ical:
|
||||||
|
image: golang:alpine
|
||||||
|
stage: build
|
||||||
|
rules:
|
||||||
|
- changes:
|
||||||
|
- services/ical/**/*
|
||||||
|
script:
|
||||||
|
- cd services/ical
|
||||||
|
- go build -o htwkalender-ical
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- data-manager/htwkalender-ical
|
||||||
|
- data-manager/go.sum
|
||||||
|
- data-manager/go.mod
|
||||||
|
|
||||||
build-frontend:
|
build-frontend:
|
||||||
image: node:lts
|
image: node:lts
|
||||||
@ -75,17 +102,29 @@ build-frontend:
|
|||||||
paths:
|
paths:
|
||||||
- frontend/build
|
- frontend/build
|
||||||
|
|
||||||
test-backend:
|
test-data-manager:
|
||||||
image: golang:alpine
|
image: golang:alpine
|
||||||
stage: test
|
stage: test
|
||||||
rules:
|
rules:
|
||||||
- changes:
|
- changes:
|
||||||
- backend/**/*
|
- services/data-manager/**/*
|
||||||
script:
|
script:
|
||||||
- cd backend
|
- cd services/data-manager
|
||||||
- go test -v ./...
|
- go test -v ./...
|
||||||
dependencies:
|
dependencies:
|
||||||
- build-backend
|
- build-data-manager
|
||||||
|
|
||||||
|
test-ical:
|
||||||
|
image: golang:alpine
|
||||||
|
stage: test
|
||||||
|
rules:
|
||||||
|
- changes:
|
||||||
|
- services/ical/**/*
|
||||||
|
script:
|
||||||
|
- cd services/ical
|
||||||
|
- go test -v ./...
|
||||||
|
dependencies:
|
||||||
|
- build-ical
|
||||||
|
|
||||||
test-frontend:
|
test-frontend:
|
||||||
image: node:lts
|
image: node:lts
|
||||||
@ -100,7 +139,7 @@ test-frontend:
|
|||||||
dependencies:
|
dependencies:
|
||||||
- lint-frontend
|
- lint-frontend
|
||||||
|
|
||||||
build-backend-image:
|
build-data-manager-image:
|
||||||
stage: oci-build
|
stage: oci-build
|
||||||
image: docker:latest
|
image: docker:latest
|
||||||
services:
|
services:
|
||||||
@ -108,7 +147,7 @@ build-backend-image:
|
|||||||
tags:
|
tags:
|
||||||
- image
|
- image
|
||||||
variables:
|
variables:
|
||||||
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-backend
|
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-data-manager
|
||||||
DOCKER_HOST: tcp://docker:2376
|
DOCKER_HOST: tcp://docker:2376
|
||||||
DOCKER_TLS_CERTDIR: "/certs"
|
DOCKER_TLS_CERTDIR: "/certs"
|
||||||
DOCKER_TLS_VERIFY: 1
|
DOCKER_TLS_VERIFY: 1
|
||||||
@ -116,12 +155,35 @@ build-backend-image:
|
|||||||
before_script:
|
before_script:
|
||||||
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
||||||
script:
|
script:
|
||||||
- docker build --pull -t $IMAGE_TAG -f ./backend/Dockerfile --target prod ./backend
|
- docker build --pull -t $IMAGE_TAG -f ./services/data-manager/Dockerfile --target prod ./services/data-manager
|
||||||
- docker push $IMAGE_TAG
|
- docker push $IMAGE_TAG
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"
|
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"
|
||||||
changes:
|
changes:
|
||||||
- backend/**/*
|
- services/data-manager/**/*
|
||||||
|
|
||||||
|
build-ical-image:
|
||||||
|
stage: oci-build
|
||||||
|
image: docker:latest
|
||||||
|
services:
|
||||||
|
- docker:dind
|
||||||
|
tags:
|
||||||
|
- image
|
||||||
|
variables:
|
||||||
|
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-ical
|
||||||
|
DOCKER_HOST: tcp://docker:2376
|
||||||
|
DOCKER_TLS_CERTDIR: "/certs"
|
||||||
|
DOCKER_TLS_VERIFY: 1
|
||||||
|
DOCKER_CERT_PATH: "/certs/client"
|
||||||
|
before_script:
|
||||||
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
||||||
|
script:
|
||||||
|
- docker build --pull -t $IMAGE_TAG -f ./services/ical/Dockerfile --target prod ./services/ical
|
||||||
|
- docker push $IMAGE_TAG
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"
|
||||||
|
changes:
|
||||||
|
- services/ical/**/*
|
||||||
|
|
||||||
build-frontend-image:
|
build-frontend-image:
|
||||||
stage: oci-build
|
stage: oci-build
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
services:
|
services:
|
||||||
htwkalender-backend:
|
htwkalender-data-manager:
|
||||||
image: DOCKER_REGISTRY_REPO-backend # DOCKER_REGISTRY_REPO will be replaced by CI
|
image: DOCKER_REGISTRY_REPO-backend # DOCKER_REGISTRY_REPO will be replaced by CI
|
||||||
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
@ -25,12 +25,21 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- "net"
|
- "net"
|
||||||
|
|
||||||
|
htwkalender-ical:
|
||||||
|
image: DOCKER_REGISTRY_REPO-ical # DOCKER_REGISTRY_REPO will be replaced by CI
|
||||||
|
pull_policy: always
|
||||||
|
restart: always
|
||||||
|
target: prod
|
||||||
|
networks:
|
||||||
|
- "net"
|
||||||
|
|
||||||
htwkalender-frontend:
|
htwkalender-frontend:
|
||||||
image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI
|
image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- htwkalender-backend
|
- htwkalender-data-manager
|
||||||
|
- htwkalender-ical
|
||||||
networks:
|
networks:
|
||||||
- "net"
|
- "net"
|
||||||
|
|
||||||
@ -42,8 +51,9 @@ services:
|
|||||||
- ./dev_htwkalender_de.pem:/opt/bitnami/nginx/conf/dev_htwkalender_de.pem
|
- ./dev_htwkalender_de.pem:/opt/bitnami/nginx/conf/dev_htwkalender_de.pem
|
||||||
- ./dev_htwkalender_de.key.pem:/opt/bitnami/nginx/conf/dev_htwkalender_de.key.pem
|
- ./dev_htwkalender_de.key.pem:/opt/bitnami/nginx/conf/dev_htwkalender_de.key.pem
|
||||||
depends_on:
|
depends_on:
|
||||||
- htwkalender-backend
|
- htwkalender-data-manager
|
||||||
- htwkalender-frontend
|
- htwkalender-frontend
|
||||||
|
- htwkalender-ical
|
||||||
ports:
|
ports:
|
||||||
- "443:443"
|
- "443:443"
|
||||||
- "80:80"
|
- "80:80"
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
services:
|
services:
|
||||||
htwkalender-backend:
|
htwkalender-data-manager:
|
||||||
image: DOCKER_REGISTRY_REPO-backend # DOCKER_REGISTRY_REPO will be replaced by CI
|
image: DOCKER_REGISTRY_REPO-backend # DOCKER_REGISTRY_REPO will be replaced by CI
|
||||||
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
@ -30,7 +30,7 @@ services:
|
|||||||
pull_policy: always
|
pull_policy: always
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- htwkalender-backend
|
- htwkalender-data-manager
|
||||||
networks:
|
networks:
|
||||||
- "net"
|
- "net"
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ services:
|
|||||||
- ./cal.htwk-leipzig.de.pem:/opt/bitnami/nginx/conf/cal.htwk-leipzig.de.pem
|
- ./cal.htwk-leipzig.de.pem:/opt/bitnami/nginx/conf/cal.htwk-leipzig.de.pem
|
||||||
- ./cal.htwk-leipzig.de.key.pem:/opt/bitnami/nginx/conf/cal.htwk-leipzig.de.key.pem
|
- ./cal.htwk-leipzig.de.key.pem:/opt/bitnami/nginx/conf/cal.htwk-leipzig.de.key.pem
|
||||||
depends_on:
|
depends_on:
|
||||||
- htwkalender-backend
|
- htwkalender-data-manager
|
||||||
- htwkalender-frontend
|
- htwkalender-frontend
|
||||||
ports:
|
ports:
|
||||||
- "443:443"
|
- "443:443"
|
||||||
|
@ -15,17 +15,17 @@
|
|||||||
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
#along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
services:
|
services:
|
||||||
htwkalender-backend:
|
htwkalender-data-manager:
|
||||||
build:
|
build:
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
context: ./services/backend
|
context: services/data-manager
|
||||||
target: dev # prod
|
target: dev # prod
|
||||||
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
|
||||||
ports:
|
ports:
|
||||||
- "8090:8090"
|
- "8090:8090"
|
||||||
volumes:
|
volumes:
|
||||||
- pb_data:/htwkalender/data # for production with volume
|
- pb_data:/htwkalender/data # for production with volume
|
||||||
# - ./backend:/htwkalender/data # for development with bind mount from project directory
|
# - ./data-manager:/htwkalender/data # for development with bind mount from project directory
|
||||||
|
|
||||||
htwkalender-ical:
|
htwkalender-ical:
|
||||||
build:
|
build:
|
||||||
@ -51,7 +51,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./reverseproxy.local.conf:/opt/bitnami/nginx/conf/nginx.conf
|
- ./reverseproxy.local.conf:/opt/bitnami/nginx/conf/nginx.conf
|
||||||
depends_on:
|
depends_on:
|
||||||
- htwkalender-backend
|
- htwkalender-data-manager
|
||||||
- htwkalender-frontend
|
- htwkalender-frontend
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import { Module } from "../model/module";
|
import { Module } from "../model/module";
|
||||||
|
|
||||||
export async function fetchModule(module: Module): Promise<Module> {
|
export async function fetchModule(module: Module): Promise<Module> {
|
||||||
// request to the backend on /api/module with query parameters name as the module name
|
// request to the data-manager on /api/module with query parameters name as the module name
|
||||||
const request = new Request("/api/module?uuid=" + module.uuid);
|
const request = new Request("/api/module?uuid=" + module.uuid);
|
||||||
|
|
||||||
return await fetch(request)
|
return await fetch(request)
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
//You should have received a copy of the GNU Affero General Public License
|
//You should have received a copy of the GNU Affero General Public License
|
||||||
//along with this program. If not, see <https://www.gnu.org/licenses/>.
|
//along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
// load free rooms as a list of strings form the backend
|
// load free rooms as a list of strings form the data-manager
|
||||||
export async function requestFreeRooms(
|
export async function requestFreeRooms(
|
||||||
from: string,
|
from: string,
|
||||||
to: string,
|
to: string,
|
||||||
|
@ -116,7 +116,7 @@ http {
|
|||||||
server_name cal.htwk-leipzig.de;
|
server_name cal.htwk-leipzig.de;
|
||||||
|
|
||||||
location /api/feed {
|
location /api/feed {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-ical:8091;
|
||||||
client_max_body_size 2m;
|
client_max_body_size 2m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -136,7 +136,7 @@ http {
|
|||||||
server_name htwkalender.de;
|
server_name htwkalender.de;
|
||||||
|
|
||||||
location /api/feed {
|
location /api/feed {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-ical:8091;
|
||||||
client_max_body_size 2m;
|
client_max_body_size 2m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -169,7 +169,7 @@ http {
|
|||||||
ssl_certificate_key cal.htwk-leipzig.de.key.pem;
|
ssl_certificate_key cal.htwk-leipzig.de.key.pem;
|
||||||
|
|
||||||
location /api {
|
location /api {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -179,7 +179,7 @@ http {
|
|||||||
|
|
||||||
# Cache only specific URI
|
# Cache only specific URI
|
||||||
location /api/modules {
|
location /api/modules {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -197,7 +197,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/events/types {
|
location /api/events/types {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -215,7 +215,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/rooms {
|
location /api/rooms {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -233,7 +233,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/schedule {
|
location /api/schedule {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -251,7 +251,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/courses {
|
location /api/courses {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -269,7 +269,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/feed {
|
location /api/feed {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-ical:8091;
|
||||||
client_max_body_size 2m;
|
client_max_body_size 2m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -278,20 +278,8 @@ http {
|
|||||||
limit_req zone=feed burst=10 nodelay;
|
limit_req zone=feed burst=10 nodelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /api/createFeed {
|
|
||||||
limit_req zone=createFeed nodelay;
|
|
||||||
# return limit request error
|
|
||||||
limit_req_status 429;
|
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
|
||||||
client_max_body_size 2m;
|
|
||||||
proxy_connect_timeout 600s;
|
|
||||||
proxy_read_timeout 600s;
|
|
||||||
proxy_send_timeout 600s;
|
|
||||||
send_timeout 600s;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_ {
|
location /_ {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
# if user is not 0 in admin list, return 404
|
# if user is not 0 in admin list, return 404
|
||||||
if ($admin) {
|
if ($admin) {
|
||||||
return 404 "Not Found";
|
return 404 "Not Found";
|
||||||
|
@ -125,7 +125,7 @@ http {
|
|||||||
ssl_certificate_key dev_htwkalender_de.key.pem;
|
ssl_certificate_key dev_htwkalender_de.key.pem;
|
||||||
|
|
||||||
location /api/feed {
|
location /api/feed {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-ical:8091;
|
||||||
client_max_body_size 2m;
|
client_max_body_size 2m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -135,7 +135,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api {
|
location /api {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -145,7 +145,7 @@ http {
|
|||||||
|
|
||||||
# Cache only specific URI
|
# Cache only specific URI
|
||||||
location /api/modules {
|
location /api/modules {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -163,7 +163,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/rooms {
|
location /api/rooms {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -181,7 +181,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/schedule {
|
location /api/schedule {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -199,7 +199,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api/courses {
|
location /api/courses {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -216,20 +216,8 @@ http {
|
|||||||
limit_req zone=modules burst=5 nodelay;
|
limit_req zone=modules burst=5 nodelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /api/createFeed {
|
|
||||||
limit_req zone=createFeed nodelay;
|
|
||||||
# return limit request error
|
|
||||||
limit_req_status 429;
|
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
|
||||||
client_max_body_size 2m;
|
|
||||||
proxy_connect_timeout 600s;
|
|
||||||
proxy_read_timeout 600s;
|
|
||||||
proxy_send_timeout 600s;
|
|
||||||
send_timeout 600s;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_ {
|
location /_ {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
# if user is not 0 in admin list, return 404
|
# if user is not 0 in admin list, return 404
|
||||||
if ($admin) {
|
if ($admin) {
|
||||||
return 404 "Not Found";
|
return 404 "Not Found";
|
||||||
|
@ -62,7 +62,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /api {
|
location /api {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
client_max_body_size 20m;
|
client_max_body_size 20m;
|
||||||
proxy_connect_timeout 600s;
|
proxy_connect_timeout 600s;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
@ -71,7 +71,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /_ {
|
location /_ {
|
||||||
proxy_pass http://htwkalender-backend:8090;
|
proxy_pass http://htwkalender-data-manager:8090;
|
||||||
# Increase upload file size
|
# Increase upload file size
|
||||||
client_max_body_size 100m;
|
client_max_body_size 100m;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"htwkalender/service/db"
|
"htwkalender/service/db"
|
||||||
"htwkalender/service/ical"
|
"htwkalender/service/ical"
|
||||||
"io"
|
"io"
|
||||||
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ func addFeedRoutes(app *pocketbase.PocketBase) {
|
|||||||
requestBody, _ := io.ReadAll(c.Request().Body)
|
requestBody, _ := io.ReadAll(c.Request().Body)
|
||||||
result, err := ical.CreateIndividualFeed(requestBody, app)
|
result, err := ical.CreateIndividualFeed(requestBody, app)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
slog.Error("Failed to create individual feed", "error", err)
|
||||||
return c.JSON(http.StatusInternalServerError, "Failed to create individual feed")
|
return c.JSON(http.StatusInternalServerError, "Failed to create individual feed")
|
||||||
}
|
}
|
||||||
return c.JSON(http.StatusOK, result)
|
return c.JSON(http.StatusOK, result)
|
@ -19,11 +19,12 @@ package main
|
|||||||
import (
|
import (
|
||||||
"github.com/gofiber/fiber/v3"
|
"github.com/gofiber/fiber/v3"
|
||||||
"github.com/gofiber/fiber/v3/log"
|
"github.com/gofiber/fiber/v3/log"
|
||||||
|
"github.com/gofiber/fiber/v3/middleware/logger"
|
||||||
"htwkalender-ical/service"
|
"htwkalender-ical/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
// main function for the ical service
|
// main function for the ical service
|
||||||
// uses rest api to get the data from the backend
|
// uses rest api to get the data from the data-manager
|
||||||
// exposes rest api endpoints with fiber to serve the data for clients
|
// exposes rest api endpoints with fiber to serve the data for clients
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
@ -38,7 +39,9 @@ func main() {
|
|||||||
RequestMethods: append(fiber.DefaultMethods[:], webdavRequestMethods...),
|
RequestMethods: append(fiber.DefaultMethods[:], webdavRequestMethods...),
|
||||||
})
|
})
|
||||||
|
|
||||||
// Add routes to the app instance for the backend ical service
|
app.Use(logger.New())
|
||||||
|
|
||||||
|
// Add routes to the app instance for the data-manager ical service
|
||||||
service.AddFeedRoutes(app)
|
service.AddFeedRoutes(app)
|
||||||
|
|
||||||
log.Fatal(app.Listen(":8091"))
|
log.Fatal(app.Listen(":8091"))
|
||||||
|
@ -2,6 +2,7 @@ package connector
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"htwkalender-ical/model"
|
"htwkalender-ical/model"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
)
|
)
|
||||||
@ -77,3 +78,24 @@ func parseModuleResponse(body []byte) (model.Module, error) {
|
|||||||
|
|
||||||
return module, nil
|
return module, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SaveFeedRecord(modules []model.FeedCollection) (string, error) {
|
||||||
|
var token string
|
||||||
|
|
||||||
|
response, err := PostRequestApi("/api/feed", modules)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if response.StatusCode() != 200 {
|
||||||
|
return "", errors.New("failed to save feed")
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse the response body json to string
|
||||||
|
err = json.Unmarshal(response.Body(), &token)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return token, nil
|
||||||
|
}
|
||||||
|
@ -2,12 +2,13 @@ package connector
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gofiber/fiber/v3/client"
|
"github.com/gofiber/fiber/v3/client"
|
||||||
|
"htwkalender-ical/model"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func RequestApi(path string) (*client.Response, error) {
|
const host = "http://127.0.0.1:8090"
|
||||||
|
|
||||||
var host = "http://htwkalender-backend:8090"
|
func RequestApi(path string) (*client.Response, error) {
|
||||||
|
|
||||||
cc := client.New()
|
cc := client.New()
|
||||||
cc.SetTimeout(5 * time.Second)
|
cc.SetTimeout(5 * time.Second)
|
||||||
@ -23,8 +24,6 @@ func RequestApi(path string) (*client.Response, error) {
|
|||||||
|
|
||||||
func DeleteRequestApi(path string) error {
|
func DeleteRequestApi(path string) error {
|
||||||
|
|
||||||
var host = "http://htwkalender-backend:8090"
|
|
||||||
|
|
||||||
cc := client.New()
|
cc := client.New()
|
||||||
cc.SetTimeout(5 * time.Second)
|
cc.SetTimeout(5 * time.Second)
|
||||||
|
|
||||||
@ -36,3 +35,25 @@ func DeleteRequestApi(path string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PostRequestApi(path string, body []model.FeedCollection) (*client.Response, error) {
|
||||||
|
|
||||||
|
cc := client.New()
|
||||||
|
cc.SetTimeout(5 * time.Second)
|
||||||
|
|
||||||
|
config := client.Config{
|
||||||
|
Body: body,
|
||||||
|
Header: map[string]string{
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Accept": "*/*",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// set retry to 0
|
||||||
|
response, err := cc.Post(host+path, config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/jordic/goics"
|
"github.com/jordic/goics"
|
||||||
"htwkalender-ical/model"
|
"htwkalender-ical/model"
|
||||||
"htwkalender-ical/service/connector"
|
"htwkalender-ical/service/connector"
|
||||||
|
"log/slog"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,3 +62,15 @@ func DeleteFeedRecord(token string) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CreateFeed(modules []model.FeedCollection) (string, error) {
|
||||||
|
|
||||||
|
// Save feed
|
||||||
|
token, err := connector.SaveFeedRecord(modules)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Failed to save feed", "error", err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return token, nil
|
||||||
|
}
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"github.com/gofiber/fiber/v3"
|
"github.com/gofiber/fiber/v3"
|
||||||
|
"github.com/gofiber/fiber/v3/log"
|
||||||
|
"htwkalender-ical/model"
|
||||||
"htwkalender-ical/service/ical"
|
"htwkalender-ical/service/ical"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
// add routes to the app instance for the backend ical service
|
// add routes to the app instance for the data-manager ical service
|
||||||
// with golang fiber
|
// with golang fiber
|
||||||
func AddFeedRoutes(app *fiber.App) {
|
func AddFeedRoutes(app *fiber.App) {
|
||||||
|
|
||||||
@ -29,6 +32,27 @@ func AddFeedRoutes(app *fiber.App) {
|
|||||||
return c.SendString(results)
|
return c.SendString(results)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Define a route for the POST method on the root path '/api/feed'
|
||||||
|
app.Post("/api/feed", func(c fiber.Ctx) error {
|
||||||
|
modules := []model.FeedCollection{}
|
||||||
|
//obtain the body of the request
|
||||||
|
err := json.Unmarshal(c.Body(), &modules)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Failed to unmarshal request body", "error", err)
|
||||||
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a new feed
|
||||||
|
token, err := ical.CreateFeed(modules)
|
||||||
|
if err != nil {
|
||||||
|
println(err)
|
||||||
|
log.Error("Failed to create feed", "error", err)
|
||||||
|
return c.SendStatus(fiber.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(token)
|
||||||
|
})
|
||||||
|
|
||||||
// Define a route for the GET method on the root path '/'
|
// Define a route for the GET method on the root path '/'
|
||||||
app.Get("/api/collections/feeds/records/:token", func(c fiber.Ctx) error {
|
app.Get("/api/collections/feeds/records/:token", func(c fiber.Ctx) error {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user