diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5a50f61..47abdeb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,33 +33,60 @@ lint-frontend:
- npm i
- npm run lint-no-fix
-lint-backend:
+lint-data-manager:
stage: lint
image: golangci/golangci-lint:latest
rules:
- changes:
- - backend/**/*
+ - services/data-manager/**/*
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
- golangci-lint --version
- golangci-lint run -v --skip-dirs=migrations --timeout=5m
-build-backend:
+build-data-manager:
image: golang:alpine
stage: build
rules:
- changes:
- - backend/**/*
+ - services/data-manager/**/*
script:
- - cd backend
+ - cd services/data-manager
- go build -o htwkalender
artifacts:
paths:
- - backend/htwkalender
- - backend/go.sum
- - backend/go.mod
+ - data-manager/htwkalender
+ - data-manager/go.sum
+ - 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:
image: node:lts
@@ -75,17 +102,29 @@ build-frontend:
paths:
- frontend/build
-test-backend:
+test-data-manager:
image: golang:alpine
stage: test
rules:
- changes:
- - backend/**/*
+ - services/data-manager/**/*
script:
- - cd backend
+ - cd services/data-manager
- go test -v ./...
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:
image: node:lts
@@ -100,7 +139,7 @@ test-frontend:
dependencies:
- lint-frontend
-build-backend-image:
+build-data-manager-image:
stage: oci-build
image: docker:latest
services:
@@ -108,7 +147,7 @@ build-backend-image:
tags:
- image
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_TLS_CERTDIR: "/certs"
DOCKER_TLS_VERIFY: 1
@@ -116,12 +155,35 @@ build-backend-image:
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
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
rules:
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"
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:
stage: oci-build
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index c22cc99..c394f53 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -15,7 +15,7 @@
#along with this program. If not, see .
services:
- htwkalender-backend:
+ htwkalender-data-manager:
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"
pull_policy: always
@@ -25,12 +25,21 @@ services:
networks:
- "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:
image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI
pull_policy: always
restart: always
depends_on:
- - htwkalender-backend
+ - htwkalender-data-manager
+ - htwkalender-ical
networks:
- "net"
@@ -42,8 +51,9 @@ services:
- ./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
depends_on:
- - htwkalender-backend
+ - htwkalender-data-manager
- htwkalender-frontend
+ - htwkalender-ical
ports:
- "443:443"
- "80:80"
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index f33790e..6684e2e 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -15,7 +15,7 @@
#along with this program. If not, see .
services:
- htwkalender-backend:
+ htwkalender-data-manager:
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"
pull_policy: always
@@ -30,7 +30,7 @@ services:
pull_policy: always
restart: always
depends_on:
- - htwkalender-backend
+ - htwkalender-data-manager
networks:
- "net"
@@ -44,7 +44,7 @@ services:
- ./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
depends_on:
- - htwkalender-backend
+ - htwkalender-data-manager
- htwkalender-frontend
ports:
- "443:443"
diff --git a/docker-compose.yml b/docker-compose.yml
index 7196551..101cdf6 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -15,17 +15,17 @@
#along with this program. If not, see .
services:
- htwkalender-backend:
+ htwkalender-data-manager:
build:
dockerfile: Dockerfile
- context: ./services/backend
+ context: services/data-manager
target: dev # prod
command: "--http=0.0.0.0:8090 --dir=/htwkalender/data/pb_data"
ports:
- "8090:8090"
volumes:
- 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:
build:
@@ -51,7 +51,7 @@ services:
volumes:
- ./reverseproxy.local.conf:/opt/bitnami/nginx/conf/nginx.conf
depends_on:
- - htwkalender-backend
+ - htwkalender-data-manager
- htwkalender-frontend
ports:
- "80:80"
diff --git a/frontend/src/api/fetchModule.ts b/frontend/src/api/fetchModule.ts
index f6cfb27..0238933 100644
--- a/frontend/src/api/fetchModule.ts
+++ b/frontend/src/api/fetchModule.ts
@@ -17,7 +17,7 @@
import { Module } from "../model/module";
export async function fetchModule(module: Module): Promise {
- // 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);
return await fetch(request)
diff --git a/frontend/src/api/requestFreeRooms.ts b/frontend/src/api/requestFreeRooms.ts
index 4a33d62..5d467ec 100644
--- a/frontend/src/api/requestFreeRooms.ts
+++ b/frontend/src/api/requestFreeRooms.ts
@@ -14,7 +14,7 @@
//You should have received a copy of the GNU Affero General Public License
//along with this program. If not, see .
-// 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(
from: string,
to: string,
diff --git a/reverseproxy.conf b/reverseproxy.conf
index 0a6d63f..743579e 100644
--- a/reverseproxy.conf
+++ b/reverseproxy.conf
@@ -116,7 +116,7 @@ http {
server_name cal.htwk-leipzig.de;
location /api/feed {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-ical:8091;
client_max_body_size 2m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -136,7 +136,7 @@ http {
server_name htwkalender.de;
location /api/feed {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-ical:8091;
client_max_body_size 2m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -169,7 +169,7 @@ http {
ssl_certificate_key cal.htwk-leipzig.de.key.pem;
location /api {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -179,7 +179,7 @@ http {
# Cache only specific URI
location /api/modules {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -197,7 +197,7 @@ http {
}
location /api/events/types {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -215,7 +215,7 @@ http {
}
location /api/rooms {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -233,7 +233,7 @@ http {
}
location /api/schedule {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -251,7 +251,7 @@ http {
}
location /api/courses {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -269,7 +269,7 @@ http {
}
location /api/feed {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-ical:8091;
client_max_body_size 2m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -278,20 +278,8 @@ http {
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 /_ {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
# if user is not 0 in admin list, return 404
if ($admin) {
return 404 "Not Found";
diff --git a/reverseproxy.dev.conf b/reverseproxy.dev.conf
index d300798..1d276f4 100644
--- a/reverseproxy.dev.conf
+++ b/reverseproxy.dev.conf
@@ -125,7 +125,7 @@ http {
ssl_certificate_key dev_htwkalender_de.key.pem;
location /api/feed {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-ical:8091;
client_max_body_size 2m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -135,7 +135,7 @@ http {
}
location /api {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -145,7 +145,7 @@ http {
# Cache only specific URI
location /api/modules {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -163,7 +163,7 @@ http {
}
location /api/rooms {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -181,7 +181,7 @@ http {
}
location /api/schedule {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -199,7 +199,7 @@ http {
}
location /api/courses {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -216,20 +216,8 @@ http {
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 /_ {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
# if user is not 0 in admin list, return 404
if ($admin) {
return 404 "Not Found";
diff --git a/reverseproxy.local.conf b/reverseproxy.local.conf
index 3804c59..766f7be 100644
--- a/reverseproxy.local.conf
+++ b/reverseproxy.local.conf
@@ -62,7 +62,7 @@ http {
}
location /api {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
client_max_body_size 20m;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
@@ -71,7 +71,7 @@ http {
}
location /_ {
- proxy_pass http://htwkalender-backend:8090;
+ proxy_pass http://htwkalender-data-manager:8090;
# Increase upload file size
client_max_body_size 100m;
}
diff --git a/services/backend/.gitignore b/services/data-manager/.gitignore
similarity index 100%
rename from services/backend/.gitignore
rename to services/data-manager/.gitignore
diff --git a/services/backend/Dockerfile b/services/data-manager/Dockerfile
similarity index 100%
rename from services/backend/Dockerfile
rename to services/data-manager/Dockerfile
diff --git a/services/backend/LICENSE b/services/data-manager/LICENSE
similarity index 100%
rename from services/backend/LICENSE
rename to services/data-manager/LICENSE
diff --git a/services/backend/README.md b/services/data-manager/README.md
similarity index 100%
rename from services/backend/README.md
rename to services/data-manager/README.md
diff --git a/services/backend/go.mod b/services/data-manager/go.mod
similarity index 100%
rename from services/backend/go.mod
rename to services/data-manager/go.mod
diff --git a/services/backend/go.sum b/services/data-manager/go.sum
similarity index 100%
rename from services/backend/go.sum
rename to services/data-manager/go.sum
diff --git a/services/backend/main.go b/services/data-manager/main.go
similarity index 100%
rename from services/backend/main.go
rename to services/data-manager/main.go
diff --git a/services/backend/migrations/1695150679_collections_snapshot.go b/services/data-manager/migrations/1695150679_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1695150679_collections_snapshot.go
rename to services/data-manager/migrations/1695150679_collections_snapshot.go
diff --git a/services/backend/migrations/1695151278_add_admin_account.go b/services/data-manager/migrations/1695151278_add_admin_account.go
similarity index 100%
rename from services/backend/migrations/1695151278_add_admin_account.go
rename to services/data-manager/migrations/1695151278_add_admin_account.go
diff --git a/services/backend/migrations/1697532023_collections_snapshot.go b/services/data-manager/migrations/1697532023_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1697532023_collections_snapshot.go
rename to services/data-manager/migrations/1697532023_collections_snapshot.go
diff --git a/services/backend/migrations/1697570688_collections_snapshot.go b/services/data-manager/migrations/1697570688_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1697570688_collections_snapshot.go
rename to services/data-manager/migrations/1697570688_collections_snapshot.go
diff --git a/services/backend/migrations/1698017941_updated_events.go b/services/data-manager/migrations/1698017941_updated_events.go
similarity index 100%
rename from services/backend/migrations/1698017941_updated_events.go
rename to services/data-manager/migrations/1698017941_updated_events.go
diff --git a/services/backend/migrations/1698770845_updated_events.go b/services/data-manager/migrations/1698770845_updated_events.go
similarity index 100%
rename from services/backend/migrations/1698770845_updated_events.go
rename to services/data-manager/migrations/1698770845_updated_events.go
diff --git a/services/backend/migrations/1698770863_updated_events.go b/services/data-manager/migrations/1698770863_updated_events.go
similarity index 100%
rename from services/backend/migrations/1698770863_updated_events.go
rename to services/data-manager/migrations/1698770863_updated_events.go
diff --git a/services/backend/migrations/1698770891_collections_snapshot.go b/services/data-manager/migrations/1698770891_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1698770891_collections_snapshot.go
rename to services/data-manager/migrations/1698770891_collections_snapshot.go
diff --git a/services/backend/migrations/1700512738_updated_feeds.go b/services/data-manager/migrations/1700512738_updated_feeds.go
similarity index 100%
rename from services/backend/migrations/1700512738_updated_feeds.go
rename to services/data-manager/migrations/1700512738_updated_feeds.go
diff --git a/services/backend/migrations/1700512916_collections_snapshot.go b/services/data-manager/migrations/1700512916_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1700512916_collections_snapshot.go
rename to services/data-manager/migrations/1700512916_collections_snapshot.go
diff --git a/services/backend/migrations/1706827339_collections_snapshot.go b/services/data-manager/migrations/1706827339_collections_snapshot.go
similarity index 100%
rename from services/backend/migrations/1706827339_collections_snapshot.go
rename to services/data-manager/migrations/1706827339_collections_snapshot.go
diff --git a/services/backend/migrations/1706827586_updated_groups.go b/services/data-manager/migrations/1706827586_updated_groups.go
similarity index 100%
rename from services/backend/migrations/1706827586_updated_groups.go
rename to services/data-manager/migrations/1706827586_updated_groups.go
diff --git a/services/backend/model/eventModel.go b/services/data-manager/model/eventModel.go
similarity index 100%
rename from services/backend/model/eventModel.go
rename to services/data-manager/model/eventModel.go
diff --git a/services/backend/model/eventModel_test.go b/services/data-manager/model/eventModel_test.go
similarity index 100%
rename from services/backend/model/eventModel_test.go
rename to services/data-manager/model/eventModel_test.go
diff --git a/services/backend/model/feedModel.go b/services/data-manager/model/feedModel.go
similarity index 100%
rename from services/backend/model/feedModel.go
rename to services/data-manager/model/feedModel.go
diff --git a/services/backend/model/feedModel_test.go b/services/data-manager/model/feedModel_test.go
similarity index 100%
rename from services/backend/model/feedModel_test.go
rename to services/data-manager/model/feedModel_test.go
diff --git a/services/backend/model/icalModel.go b/services/data-manager/model/icalModel.go
similarity index 100%
rename from services/backend/model/icalModel.go
rename to services/data-manager/model/icalModel.go
diff --git a/services/backend/model/moduleModel.go b/services/data-manager/model/moduleModel.go
similarity index 100%
rename from services/backend/model/moduleModel.go
rename to services/data-manager/model/moduleModel.go
diff --git a/services/backend/model/moduleModel_test.go b/services/data-manager/model/moduleModel_test.go
similarity index 100%
rename from services/backend/model/moduleModel_test.go
rename to services/data-manager/model/moduleModel_test.go
diff --git a/services/backend/model/seminarGroup.go b/services/data-manager/model/seminarGroup.go
similarity index 100%
rename from services/backend/model/seminarGroup.go
rename to services/data-manager/model/seminarGroup.go
diff --git a/services/backend/model/seminarGroupXMLStruct.go b/services/data-manager/model/seminarGroupXMLStruct.go
similarity index 100%
rename from services/backend/model/seminarGroupXMLStruct.go
rename to services/data-manager/model/seminarGroupXMLStruct.go
diff --git a/services/backend/model/sportFetcherModel.go b/services/data-manager/model/sportFetcherModel.go
similarity index 100%
rename from services/backend/model/sportFetcherModel.go
rename to services/data-manager/model/sportFetcherModel.go
diff --git a/services/backend/openapi.yml b/services/data-manager/openapi.yml
similarity index 100%
rename from services/backend/openapi.yml
rename to services/data-manager/openapi.yml
diff --git a/services/backend/pb_schema.json b/services/data-manager/pb_schema.json
similarity index 100%
rename from services/backend/pb_schema.json
rename to services/data-manager/pb_schema.json
diff --git a/services/backend/service/addCalDavRoutes.go b/services/data-manager/service/addCalDavRoutes.go
similarity index 96%
rename from services/backend/service/addCalDavRoutes.go
rename to services/data-manager/service/addCalDavRoutes.go
index 02b0e4b..9aae82f 100644
--- a/services/backend/service/addCalDavRoutes.go
+++ b/services/data-manager/service/addCalDavRoutes.go
@@ -24,6 +24,7 @@ import (
"htwkalender/service/db"
"htwkalender/service/ical"
"io"
+ "log/slog"
"net/http"
)
@@ -36,6 +37,7 @@ func addFeedRoutes(app *pocketbase.PocketBase) {
requestBody, _ := io.ReadAll(c.Request().Body)
result, err := ical.CreateIndividualFeed(requestBody, app)
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.StatusOK, result)
diff --git a/services/backend/service/addRoute.go b/services/data-manager/service/addRoute.go
similarity index 100%
rename from services/backend/service/addRoute.go
rename to services/data-manager/service/addRoute.go
diff --git a/services/backend/service/addSchedule.go b/services/data-manager/service/addSchedule.go
similarity index 100%
rename from services/backend/service/addSchedule.go
rename to services/data-manager/service/addSchedule.go
diff --git a/services/backend/service/course/courseFunctions.go b/services/data-manager/service/course/courseFunctions.go
similarity index 100%
rename from services/backend/service/course/courseFunctions.go
rename to services/data-manager/service/course/courseFunctions.go
diff --git a/services/backend/service/date/dateFormat.go b/services/data-manager/service/date/dateFormat.go
similarity index 100%
rename from services/backend/service/date/dateFormat.go
rename to services/data-manager/service/date/dateFormat.go
diff --git a/services/backend/service/date/dateFormat_test.go b/services/data-manager/service/date/dateFormat_test.go
similarity index 100%
rename from services/backend/service/date/dateFormat_test.go
rename to services/data-manager/service/date/dateFormat_test.go
diff --git a/services/backend/service/db/dbEvents.go b/services/data-manager/service/db/dbEvents.go
similarity index 100%
rename from services/backend/service/db/dbEvents.go
rename to services/data-manager/service/db/dbEvents.go
diff --git a/services/backend/service/db/dbEvents_test.go b/services/data-manager/service/db/dbEvents_test.go
similarity index 100%
rename from services/backend/service/db/dbEvents_test.go
rename to services/data-manager/service/db/dbEvents_test.go
diff --git a/services/backend/service/db/dbFeeds.go b/services/data-manager/service/db/dbFeeds.go
similarity index 100%
rename from services/backend/service/db/dbFeeds.go
rename to services/data-manager/service/db/dbFeeds.go
diff --git a/services/backend/service/db/dbFeeds_test.go b/services/data-manager/service/db/dbFeeds_test.go
similarity index 100%
rename from services/backend/service/db/dbFeeds_test.go
rename to services/data-manager/service/db/dbFeeds_test.go
diff --git a/services/backend/service/db/dbFunctions.go b/services/data-manager/service/db/dbFunctions.go
similarity index 100%
rename from services/backend/service/db/dbFunctions.go
rename to services/data-manager/service/db/dbFunctions.go
diff --git a/services/backend/service/db/dbGroups.go b/services/data-manager/service/db/dbGroups.go
similarity index 100%
rename from services/backend/service/db/dbGroups.go
rename to services/data-manager/service/db/dbGroups.go
diff --git a/services/backend/service/db/dbRooms.go b/services/data-manager/service/db/dbRooms.go
similarity index 100%
rename from services/backend/service/db/dbRooms.go
rename to services/data-manager/service/db/dbRooms.go
diff --git a/services/backend/service/db/mockData/data.db b/services/data-manager/service/db/mockData/data.db
similarity index 100%
rename from services/backend/service/db/mockData/data.db
rename to services/data-manager/service/db/mockData/data.db
diff --git a/services/backend/service/db/mockData/logs.db b/services/data-manager/service/db/mockData/logs.db
similarity index 100%
rename from services/backend/service/db/mockData/logs.db
rename to services/data-manager/service/db/mockData/logs.db
diff --git a/services/backend/service/events/courseService.go b/services/data-manager/service/events/courseService.go
similarity index 100%
rename from services/backend/service/events/courseService.go
rename to services/data-manager/service/events/courseService.go
diff --git a/services/backend/service/events/courseService_test.go b/services/data-manager/service/events/courseService_test.go
similarity index 100%
rename from services/backend/service/events/courseService_test.go
rename to services/data-manager/service/events/courseService_test.go
diff --git a/services/backend/service/events/eventService.go b/services/data-manager/service/events/eventService.go
similarity index 100%
rename from services/backend/service/events/eventService.go
rename to services/data-manager/service/events/eventService.go
diff --git a/services/backend/service/events/eventService_test.go b/services/data-manager/service/events/eventService_test.go
similarity index 100%
rename from services/backend/service/events/eventService_test.go
rename to services/data-manager/service/events/eventService_test.go
diff --git a/services/backend/service/feed/feedFunctions.go b/services/data-manager/service/feed/feedFunctions.go
similarity index 100%
rename from services/backend/service/feed/feedFunctions.go
rename to services/data-manager/service/feed/feedFunctions.go
diff --git a/services/backend/service/feed/feedFunctions_test.go b/services/data-manager/service/feed/feedFunctions_test.go
similarity index 100%
rename from services/backend/service/feed/feedFunctions_test.go
rename to services/data-manager/service/feed/feedFunctions_test.go
diff --git a/services/backend/service/feed/mockData/data.db b/services/data-manager/service/feed/mockData/data.db
similarity index 100%
rename from services/backend/service/feed/mockData/data.db
rename to services/data-manager/service/feed/mockData/data.db
diff --git a/services/backend/service/feed/mockData/logs.db b/services/data-manager/service/feed/mockData/logs.db
similarity index 100%
rename from services/backend/service/feed/mockData/logs.db
rename to services/data-manager/service/feed/mockData/logs.db
diff --git a/services/backend/service/fetch/htmlDownloader.go b/services/data-manager/service/fetch/htmlDownloader.go
similarity index 100%
rename from services/backend/service/fetch/htmlDownloader.go
rename to services/data-manager/service/fetch/htmlDownloader.go
diff --git a/services/backend/service/fetch/sport/sportFetcher.go b/services/data-manager/service/fetch/sport/sportFetcher.go
similarity index 100%
rename from services/backend/service/fetch/sport/sportFetcher.go
rename to services/data-manager/service/fetch/sport/sportFetcher.go
diff --git a/services/backend/service/fetch/sport/sportFetcher_test.go b/services/data-manager/service/fetch/sport/sportFetcher_test.go
similarity index 100%
rename from services/backend/service/fetch/sport/sportFetcher_test.go
rename to services/data-manager/service/fetch/sport/sportFetcher_test.go
diff --git a/services/backend/service/fetch/v1/fetchSeminarEventService.go b/services/data-manager/service/fetch/v1/fetchSeminarEventService.go
similarity index 100%
rename from services/backend/service/fetch/v1/fetchSeminarEventService.go
rename to services/data-manager/service/fetch/v1/fetchSeminarEventService.go
diff --git a/services/backend/service/fetch/v1/fetchSeminarEventService_test.go b/services/data-manager/service/fetch/v1/fetchSeminarEventService_test.go
similarity index 100%
rename from services/backend/service/fetch/v1/fetchSeminarEventService_test.go
rename to services/data-manager/service/fetch/v1/fetchSeminarEventService_test.go
diff --git a/services/backend/service/fetch/v1/fetchSeminarGroupService.go b/services/data-manager/service/fetch/v1/fetchSeminarGroupService.go
similarity index 100%
rename from services/backend/service/fetch/v1/fetchSeminarGroupService.go
rename to services/data-manager/service/fetch/v1/fetchSeminarGroupService.go
diff --git a/services/backend/service/fetch/v1/fetchSeminarGroupService_test.go b/services/data-manager/service/fetch/v1/fetchSeminarGroupService_test.go
similarity index 100%
rename from services/backend/service/fetch/v1/fetchSeminarGroupService_test.go
rename to services/data-manager/service/fetch/v1/fetchSeminarGroupService_test.go
diff --git a/services/backend/service/fetch/v1/htmlParsingFunctions.go b/services/data-manager/service/fetch/v1/htmlParsingFunctions.go
similarity index 100%
rename from services/backend/service/fetch/v1/htmlParsingFunctions.go
rename to services/data-manager/service/fetch/v1/htmlParsingFunctions.go
diff --git a/services/backend/service/fetch/v2/eventParser.go b/services/data-manager/service/fetch/v2/eventParser.go
similarity index 100%
rename from services/backend/service/fetch/v2/eventParser.go
rename to services/data-manager/service/fetch/v2/eventParser.go
diff --git a/services/backend/service/fetch/v2/fetcher.go b/services/data-manager/service/fetch/v2/fetcher.go
similarity index 100%
rename from services/backend/service/fetch/v2/fetcher.go
rename to services/data-manager/service/fetch/v2/fetcher.go
diff --git a/services/backend/service/fetch/v2/fetcher_test.go b/services/data-manager/service/fetch/v2/fetcher_test.go
similarity index 100%
rename from services/backend/service/fetch/v2/fetcher_test.go
rename to services/data-manager/service/fetch/v2/fetcher_test.go
diff --git a/services/backend/service/fetch/v2/htmlParsingFunctions.go b/services/data-manager/service/fetch/v2/htmlParsingFunctions.go
similarity index 100%
rename from services/backend/service/fetch/v2/htmlParsingFunctions.go
rename to services/data-manager/service/fetch/v2/htmlParsingFunctions.go
diff --git a/services/backend/service/functions/semester.go b/services/data-manager/service/functions/semester.go
similarity index 100%
rename from services/backend/service/functions/semester.go
rename to services/data-manager/service/functions/semester.go
diff --git a/services/backend/service/functions/semester_test.go b/services/data-manager/service/functions/semester_test.go
similarity index 100%
rename from services/backend/service/functions/semester_test.go
rename to services/data-manager/service/functions/semester_test.go
diff --git a/services/backend/service/functions/string.go b/services/data-manager/service/functions/string.go
similarity index 100%
rename from services/backend/service/functions/string.go
rename to services/data-manager/service/functions/string.go
diff --git a/services/backend/service/functions/string_test.go b/services/data-manager/service/functions/string_test.go
similarity index 100%
rename from services/backend/service/functions/string_test.go
rename to services/data-manager/service/functions/string_test.go
diff --git a/services/backend/service/functions/time/mockClock.go b/services/data-manager/service/functions/time/mockClock.go
similarity index 100%
rename from services/backend/service/functions/time/mockClock.go
rename to services/data-manager/service/functions/time/mockClock.go
diff --git a/services/backend/service/functions/time/parse.go b/services/data-manager/service/functions/time/parse.go
similarity index 100%
rename from services/backend/service/functions/time/parse.go
rename to services/data-manager/service/functions/time/parse.go
diff --git a/services/backend/service/functions/time/realClock.go b/services/data-manager/service/functions/time/realClock.go
similarity index 100%
rename from services/backend/service/functions/time/realClock.go
rename to services/data-manager/service/functions/time/realClock.go
diff --git a/services/backend/service/functions/time/time.go b/services/data-manager/service/functions/time/time.go
similarity index 100%
rename from services/backend/service/functions/time/time.go
rename to services/data-manager/service/functions/time/time.go
diff --git a/services/backend/service/ical/ical.go b/services/data-manager/service/ical/ical.go
similarity index 100%
rename from services/backend/service/ical/ical.go
rename to services/data-manager/service/ical/ical.go
diff --git a/services/backend/service/ical/icalFileGeneration.go b/services/data-manager/service/ical/icalFileGeneration.go
similarity index 100%
rename from services/backend/service/ical/icalFileGeneration.go
rename to services/data-manager/service/ical/icalFileGeneration.go
diff --git a/services/backend/service/ical/icalFileGeneration_test.go b/services/data-manager/service/ical/icalFileGeneration_test.go
similarity index 100%
rename from services/backend/service/ical/icalFileGeneration_test.go
rename to services/data-manager/service/ical/icalFileGeneration_test.go
diff --git a/services/backend/service/ical/icsComponenter.go b/services/data-manager/service/ical/icsComponenter.go
similarity index 100%
rename from services/backend/service/ical/icsComponenter.go
rename to services/data-manager/service/ical/icsComponenter.go
diff --git a/services/backend/service/names/userDefinedNameTemplates.go b/services/data-manager/service/names/userDefinedNameTemplates.go
similarity index 100%
rename from services/backend/service/names/userDefinedNameTemplates.go
rename to services/data-manager/service/names/userDefinedNameTemplates.go
diff --git a/services/backend/service/names/userDefinedNameTemplates_test.go b/services/data-manager/service/names/userDefinedNameTemplates_test.go
similarity index 100%
rename from services/backend/service/names/userDefinedNameTemplates_test.go
rename to services/data-manager/service/names/userDefinedNameTemplates_test.go
diff --git a/services/backend/service/room/roomService.go b/services/data-manager/service/room/roomService.go
similarity index 100%
rename from services/backend/service/room/roomService.go
rename to services/data-manager/service/room/roomService.go
diff --git a/services/backend/service/room/roomService_test.go b/services/data-manager/service/room/roomService_test.go
similarity index 100%
rename from services/backend/service/room/roomService_test.go
rename to services/data-manager/service/room/roomService_test.go
diff --git a/services/ical/main.go b/services/ical/main.go
index 1b1dbf0..4865e7c 100644
--- a/services/ical/main.go
+++ b/services/ical/main.go
@@ -19,11 +19,12 @@ package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/log"
+ "github.com/gofiber/fiber/v3/middleware/logger"
"htwkalender-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
func main() {
@@ -38,7 +39,9 @@ func main() {
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)
log.Fatal(app.Listen(":8091"))
diff --git a/services/ical/service/connector/feedConnector.go b/services/ical/service/connector/feedConnector.go
index 3f2dff5..7c98663 100644
--- a/services/ical/service/connector/feedConnector.go
+++ b/services/ical/service/connector/feedConnector.go
@@ -2,6 +2,7 @@ package connector
import (
"encoding/json"
+ "errors"
"htwkalender-ical/model"
"log/slog"
)
@@ -77,3 +78,24 @@ func parseModuleResponse(body []byte) (model.Module, error) {
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
+}
diff --git a/services/ical/service/connector/restHandler.go b/services/ical/service/connector/restHandler.go
index 5124bfd..962a6c6 100644
--- a/services/ical/service/connector/restHandler.go
+++ b/services/ical/service/connector/restHandler.go
@@ -2,12 +2,13 @@ package connector
import (
"github.com/gofiber/fiber/v3/client"
+ "htwkalender-ical/model"
"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.SetTimeout(5 * time.Second)
@@ -23,8 +24,6 @@ func RequestApi(path string) (*client.Response, error) {
func DeleteRequestApi(path string) error {
- var host = "http://htwkalender-backend:8090"
-
cc := client.New()
cc.SetTimeout(5 * time.Second)
@@ -36,3 +35,25 @@ func DeleteRequestApi(path string) error {
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
+}
diff --git a/services/ical/service/ical/ical.go b/services/ical/service/ical/ical.go
index 6245b6b..05ae05d 100644
--- a/services/ical/service/ical/ical.go
+++ b/services/ical/service/ical/ical.go
@@ -5,6 +5,7 @@ import (
"github.com/jordic/goics"
"htwkalender-ical/model"
"htwkalender-ical/service/connector"
+ "log/slog"
"time"
)
@@ -61,3 +62,15 @@ func DeleteFeedRecord(token string) error {
}
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
+}
diff --git a/services/ical/service/routes.go b/services/ical/service/routes.go
index 04856d2..32ea108 100644
--- a/services/ical/service/routes.go
+++ b/services/ical/service/routes.go
@@ -1,13 +1,16 @@
package service
import (
+ "encoding/json"
"github.com/gofiber/fiber/v3"
+ "github.com/gofiber/fiber/v3/log"
+ "htwkalender-ical/model"
"htwkalender-ical/service/ical"
"log/slog"
"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
func AddFeedRoutes(app *fiber.App) {
@@ -29,6 +32,27 @@ func AddFeedRoutes(app *fiber.App) {
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 '/'
app.Get("/api/collections/feeds/records/:token", func(c fiber.Ctx) error {