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 {