Merge branch '22-frontend-build-pipeline' into 'main'

Resolve "frontend build pipeline"

Closes #22

See merge request ekresse/htwkalender!16
This commit is contained in:
ekresse
2024-02-04 19:21:27 +00:00
7 changed files with 62 additions and 32 deletions

View File

@ -15,6 +15,19 @@ lint-frontend:
- npm i
- npm run lint-no-fix
lint-backend:
stage: lint
image: golangci/golangci-lint:latest
rules:
- changes:
- backend/**/*
script:
- cd backend
- go mod download
- golangci-lint --version
- golangci-lint run -v --skip-dirs=migrations
build-backend:
image: golang:1.21-alpine
stage: build
@ -30,6 +43,20 @@ build-backend:
- backend/go.sum
- backend/go.mod
build-frontend:
image: node:lts
stage: build
rules:
- changes:
- frontend/**/*
script:
- cd frontend
- npm i
- npm run build
artifacts:
paths:
- frontend/build
test-backend:
image: golang:1.21-alpine
stage: test

View File

@ -53,11 +53,14 @@ func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]model.ModuleDTO, error
}
func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, error) {
module, err := db.FindModuleByUUID(app, uuid)
events, err := db.FindAllEventsByModule(app, module)
module, findModuleErr := db.FindModuleByUUID(app, uuid)
if findModuleErr != nil {
return model.Module{}, findModuleErr
}
if err != nil || len(events) == 0 {
return model.Module{}, err
events, findEventsError := db.FindAllEventsByModule(app, module)
if findEventsError != nil || len(events) == 0 {
return model.Module{}, findEventsError
} else {
return model.Module{
UUID: events[0].UUID,

View File

@ -167,13 +167,9 @@ func extractStartAndEndTime(cycle string) (int, int, int, int) {
}
func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, []time.Time) {
var weekEvents []model.SportDayStartEnd
// split by regexp to get the cycle parts
var cycleParts []string
cycleParts = splitByCommaWithTime(cycle)
var cycleParts = splitByCommaWithTime(cycle)
for _, cyclePart := range cycleParts {
//cut string at the first integer/number

View File

@ -9,6 +9,7 @@ import (
"htwkalender/service/date"
"htwkalender/service/fetch"
"htwkalender/service/functions"
"log/slog"
"regexp"
"strconv"
"strings"
@ -61,9 +62,14 @@ func GetSeminarGroupsEventsFromHTML(seminarGroupsLabel []string) []model.Seminar
return seminarGroups
}
func splitEventType(events []model.Event) []model.Event {
func SplitEventType(events []model.Event) ([]model.Event, error) {
re, err := regexp.Compile("^([VPS])([wp])$")
if err != nil {
return nil, err
}
for i, event := range events {
matched, _ := regexp.Match("^([VPS])([wp])$", []byte(event.EventType))
matched := re.Match([]byte(event.EventType))
if matched {
eventType := event.EventType
event.EventType = eventType[0:1]
@ -71,7 +77,7 @@ func splitEventType(events []model.Event) []model.Event {
events[i] = event
}
}
return events
return events, nil
}
func parseSeminarGroup(result string) model.SeminarGroup {
@ -97,7 +103,13 @@ func parseSeminarGroup(result string) model.SeminarGroup {
semester, year := extractSemesterAndYear(semesterString)
events = convertWeeksToDates(events, semester, year)
events = generateUUIDs(events, course)
events = splitEventType(events)
events, err = SplitEventType(events)
if err != nil {
slog.Error("Error occurred while splitting event types: %s", err)
return model.SeminarGroup{}
}
var seminarGroup = model.SeminarGroup{
University: findFirstSpanWithClass(table, "header-1-0-0").FirstChild.Data,
Course: course,

View File

@ -205,8 +205,8 @@ func Test_splitEventType(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := splitEventType(tt.args.events); !reflect.DeepEqual(got, tt.want) {
t.Errorf("splitEventType() = %v, want %v", got, tt.want)
if got, _ := SplitEventType(tt.args.events); !reflect.DeepEqual(got, tt.want) {
t.Errorf("SplitEventType() = %v, want %v", got, tt.want)
}
})
}

View File

@ -6,7 +6,6 @@ import (
"htwkalender/model"
"htwkalender/service/date"
"htwkalender/service/functions"
"regexp"
"strings"
)
@ -50,16 +49,3 @@ func toEvents(tables [][]*html.Node, days []string) []model.Event {
}
return events
}
func splitEventType(events []model.Event) []model.Event {
for i, event := range events {
matched, _ := regexp.Match("^([VPS])([wp])$", []byte(event.EventType))
if matched {
eventType := event.EventType
event.EventType = eventType[0:1]
event.Compulsory = eventType[1:2]
events[i] = event
}
}
return events
}

View File

@ -8,7 +8,9 @@ import (
"htwkalender/model"
"htwkalender/service/db"
"htwkalender/service/fetch"
v1 "htwkalender/service/fetch/v1"
localTime "htwkalender/service/functions/time"
"log/slog"
"strings"
)
@ -86,7 +88,7 @@ func parseEventForOneSemester(url string) ([]model.Event, error) {
// Parse HTML to Node Tree
var doc *html.Node
doc, err = parseHTML(webpage, err)
doc, err = parseHTML(webpage)
if err != nil {
return nil, err
}
@ -113,7 +115,11 @@ func parseEventForOneSemester(url string) ([]model.Event, error) {
semesterString := findFirstSpanWithClass(table, "header-0-2-0").FirstChild.Data
semester, year := extractSemesterAndYear(semesterString)
events = convertWeeksToDates(events, semester, year)
events = splitEventType(events)
events, err = v1.SplitEventType(events)
if err != nil {
slog.Error("Error occurred while splitting event types: %s", err)
return nil, err
}
events = switchNameAndNotesForExam(events)
events = generateUUIDs(events)
@ -133,7 +139,7 @@ func switchNameAndNotesForExam(events []model.Event) []model.Event {
return events
}
func parseHTML(webpage string, err error) (*html.Node, error) {
func parseHTML(webpage string) (*html.Node, error) {
doc, err := html.Parse(strings.NewReader(webpage))
if err != nil {
return nil, err