mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-07-16 09:38:49 +02:00
fix:#75 refactoring duplicate function
This commit is contained in:
@ -194,6 +194,11 @@ func NewEvent(collection *core.Collection, event model.Event) (*Event, error) {
|
|||||||
ev.SetBookedAt(event.BookedAt)
|
ev.SetBookedAt(event.BookedAt)
|
||||||
ev.SetCourse(event.Course)
|
ev.SetCourse(event.Course)
|
||||||
ev.SetSemester(event.Semester)
|
ev.SetSemester(event.Semester)
|
||||||
|
ev.SetCompulsory(event.Compulsory)
|
||||||
|
|
||||||
|
if event.UUID == "" {
|
||||||
|
event.UUID = uuid.NewString()
|
||||||
|
}
|
||||||
ev.SetUUID(event.UUID)
|
ev.SetUUID(event.UUID)
|
||||||
return ev, nil
|
return ev, nil
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"htwkalender/data-manager/model"
|
"htwkalender/data-manager/model"
|
||||||
"htwkalender/data-manager/service/db"
|
"htwkalender/data-manager/service/db"
|
||||||
"htwkalender/data-manager/service/fetch/v1"
|
v1 "htwkalender/data-manager/service/fetch/v1"
|
||||||
"htwkalender/data-manager/service/functions"
|
"htwkalender/data-manager/service/functions"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -18,7 +18,6 @@ package v1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/pocketbase/pocketbase/tools/types"
|
"github.com/pocketbase/pocketbase/tools/types"
|
||||||
"golang.org/x/net/html"
|
"golang.org/x/net/html"
|
||||||
"htwkalender/data-manager/model"
|
"htwkalender/data-manager/model"
|
||||||
@ -122,7 +121,8 @@ func parseSeminarGroup(result string) model.SeminarGroup {
|
|||||||
splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks)
|
splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks)
|
||||||
events := splitEventsBySingleWeek(splitEventsByWeekVal)
|
events := splitEventsBySingleWeek(splitEventsByWeekVal)
|
||||||
events = convertWeeksToDates(events, semester, year)
|
events = convertWeeksToDates(events, semester, year)
|
||||||
events = generateUUIDs(events, course)
|
events = addCourseToEvents(events, course)
|
||||||
|
events = functions.GenerateUUIDs(events)
|
||||||
events, err = SplitEventType(events)
|
events, err = SplitEventType(events)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -139,11 +139,9 @@ func parseSeminarGroup(result string) model.SeminarGroup {
|
|||||||
return seminarGroup
|
return seminarGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateUUIDs(events []model.Event, course string) []model.Event {
|
func addCourseToEvents(events model.Events, course string) model.Events {
|
||||||
for i, event := range events {
|
for index := range events {
|
||||||
// generate a hash value from the event name, course and semester
|
events[index].Course = course
|
||||||
hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+course))
|
|
||||||
events[i].UUID = hash.String()
|
|
||||||
}
|
}
|
||||||
return events
|
return events
|
||||||
}
|
}
|
||||||
|
@ -222,60 +222,6 @@ func TestSplitEventType(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGenerateUUIDs(t *testing.T) {
|
|
||||||
type args struct {
|
|
||||||
events []model.Event
|
|
||||||
course string
|
|
||||||
}
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
args args
|
|
||||||
want []model.Event
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "Test 1",
|
|
||||||
args: args{
|
|
||||||
events: []model.Event{
|
|
||||||
{
|
|
||||||
Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
course: "21BIB-2a",
|
|
||||||
},
|
|
||||||
want: []model.Event{
|
|
||||||
{
|
|
||||||
Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS",
|
|
||||||
UUID: "3720afdc-10c7-5b72-9489-cffb70cb0c13",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Test 2",
|
|
||||||
args: args{
|
|
||||||
events: []model.Event{
|
|
||||||
{
|
|
||||||
Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
course: "21BIB-2b",
|
|
||||||
},
|
|
||||||
want: []model.Event{
|
|
||||||
{
|
|
||||||
Name: " Arbeitssicherheit / Rechtsformen von Unternehmen B435 SBB (wpf) & B348 BIB (pf) 5. FS",
|
|
||||||
UUID: "81083480-bcf1-5452-af84-bb27d79282d8",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
if got := generateUUIDs(tt.args.events, tt.args.course); !reflect.DeepEqual(got, tt.want) {
|
|
||||||
t.Errorf("generateUUIDs() = %v, want %v", got, tt.want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCreateTimeFromHourAndMinuteString(t *testing.T) {
|
func TestCreateTimeFromHourAndMinuteString(t *testing.T) {
|
||||||
type args struct {
|
type args struct {
|
||||||
tableTime string
|
tableTime string
|
||||||
@ -859,3 +805,129 @@ func sortEventsByStartDate(events []model.Event) {
|
|||||||
return events[i].Start.Time().Before(events[j].Start.Time())
|
return events[i].Start.Time().Before(events[j].Start.Time())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_addCourseToEvents(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
events model.Events
|
||||||
|
course string
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want model.Events
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Test 1",
|
||||||
|
args: args{
|
||||||
|
events: model.Events{
|
||||||
|
{
|
||||||
|
UUID: "6ebe83db-f29e-5ddd-ae8f-8724b5ba8959",
|
||||||
|
Day: "Donnerstag",
|
||||||
|
Week: "44",
|
||||||
|
Start: parseDateTime("2024-10-31 06:00:00.000Z"),
|
||||||
|
End: parseDateTime("2024-10-31 23:00:00.000Z"),
|
||||||
|
Name: "Feiertage und lehrveranstaltungsfreie Tage",
|
||||||
|
Notes: "Reformationstag",
|
||||||
|
Prof: " ",
|
||||||
|
Rooms: " ",
|
||||||
|
BookedAt: "30/07/2024",
|
||||||
|
Course: "",
|
||||||
|
EventType: "Sperr",
|
||||||
|
Compulsory: "",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UUID: "6ebe83db-f29e-5ddd-ae8f-8724b5ba8959",
|
||||||
|
Day: "Freitag",
|
||||||
|
Week: "44",
|
||||||
|
Start: parseDateTime("2024-11-01 06:00:00.000Z"),
|
||||||
|
End: parseDateTime("2024-11-01 23:00:00.000Z"),
|
||||||
|
Name: "Feiertage und lehrveranstaltungsfreie Tage",
|
||||||
|
Notes: "Brückentag Reformationstag",
|
||||||
|
Prof: " ",
|
||||||
|
Rooms: " ",
|
||||||
|
BookedAt: "30/07/2024",
|
||||||
|
Course: "",
|
||||||
|
EventType: "Sperr",
|
||||||
|
Compulsory: "",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UUID: "15e6d285-5ecd-5039-b4b2-d6fcc3dbc1a7",
|
||||||
|
Day: "Dienstag",
|
||||||
|
Week: "42",
|
||||||
|
Start: parseDateTime("2024-10-15 09:15:00.000Z"),
|
||||||
|
End: parseDateTime("2024-10-15 10:45:00.000Z"),
|
||||||
|
Name: "3.2 Leitungskompetenzen II SA-M 3. FS (pf)",
|
||||||
|
Notes: "Leitungshandeln",
|
||||||
|
Prof: "Prof. Dr. phil. Grit Behse-Bartels",
|
||||||
|
Rooms: "LI119-S",
|
||||||
|
BookedAt: "13/06/2024",
|
||||||
|
Course: "",
|
||||||
|
EventType: "S",
|
||||||
|
Compulsory: "p",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
course: "23SAM",
|
||||||
|
},
|
||||||
|
want: []model.Event{
|
||||||
|
{
|
||||||
|
UUID: "6ebe83db-f29e-5ddd-ae8f-8724b5ba8959",
|
||||||
|
Day: "Donnerstag",
|
||||||
|
Week: "44",
|
||||||
|
Start: parseDateTime("2024-10-31 06:00:00.000Z"),
|
||||||
|
End: parseDateTime("2024-10-31 23:00:00.000Z"),
|
||||||
|
Name: "Feiertage und lehrveranstaltungsfreie Tage",
|
||||||
|
Notes: "Reformationstag",
|
||||||
|
Prof: " ",
|
||||||
|
Rooms: " ",
|
||||||
|
BookedAt: "30/07/2024",
|
||||||
|
Course: "23SAM",
|
||||||
|
EventType: "Sperr",
|
||||||
|
Compulsory: "",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UUID: "6ebe83db-f29e-5ddd-ae8f-8724b5ba8959",
|
||||||
|
Day: "Freitag",
|
||||||
|
Week: "44",
|
||||||
|
Start: parseDateTime("2024-11-01 06:00:00.000Z"),
|
||||||
|
End: parseDateTime("2024-11-01 23:00:00.000Z"),
|
||||||
|
Name: "Feiertage und lehrveranstaltungsfreie Tage",
|
||||||
|
Notes: "Brückentag Reformationstag",
|
||||||
|
Prof: " ",
|
||||||
|
Rooms: " ",
|
||||||
|
BookedAt: "30/07/2024",
|
||||||
|
Course: "23SAM",
|
||||||
|
EventType: "Sperr",
|
||||||
|
Compulsory: "",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UUID: "15e6d285-5ecd-5039-b4b2-d6fcc3dbc1a7",
|
||||||
|
Day: "Dienstag",
|
||||||
|
Week: "42",
|
||||||
|
Start: parseDateTime("2024-10-15 09:15:00.000Z"),
|
||||||
|
End: parseDateTime("2024-10-15 10:45:00.000Z"),
|
||||||
|
Name: "3.2 Leitungskompetenzen II SA-M 3. FS (pf)",
|
||||||
|
Notes: "Leitungshandeln",
|
||||||
|
Prof: "Prof. Dr. phil. Grit Behse-Bartels",
|
||||||
|
Rooms: "LI119-S",
|
||||||
|
BookedAt: "13/06/2024",
|
||||||
|
Course: "23SAM",
|
||||||
|
EventType: "S",
|
||||||
|
Compulsory: "p",
|
||||||
|
Semester: "ws",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := addCourseToEvents(tt.args.events, tt.args.course); !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("addCourseToEvents() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -18,7 +18,6 @@ package v2
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"golang.org/x/net/html"
|
"golang.org/x/net/html"
|
||||||
@ -169,7 +168,7 @@ func parseEventForOneSemester(url string) ([]model.Event, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
events = switchNameAndNotesForExam(events)
|
events = switchNameAndNotesForExam(events)
|
||||||
events = generateUUIDs(events)
|
events = functions.GenerateUUIDs(events)
|
||||||
|
|
||||||
return events, nil
|
return events, nil
|
||||||
}
|
}
|
||||||
@ -194,14 +193,3 @@ func parseHTML(webpage string) (*html.Node, error) {
|
|||||||
}
|
}
|
||||||
return doc, nil
|
return doc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// generateUUIDs generates a UUID for each event based on the event name, course and semester
|
|
||||||
// the UUID is used to identify the event in the database
|
|
||||||
func generateUUIDs(events []model.Event) []model.Event {
|
|
||||||
for i, event := range events {
|
|
||||||
// generate a hash value from the event name, course and semester
|
|
||||||
hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+event.Course))
|
|
||||||
events[i].UUID = hash.String()
|
|
||||||
}
|
|
||||||
return events
|
|
||||||
}
|
|
||||||
|
@ -97,79 +97,3 @@ func TestSwitchNameAndNotesForExam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_generateUUIDs(t *testing.T) {
|
|
||||||
type args struct {
|
|
||||||
events []model.Event
|
|
||||||
}
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
args args
|
|
||||||
want []model.Event
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "generate UUIDs for events",
|
|
||||||
args: args{
|
|
||||||
events: []model.Event{
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "Computer Vision II",
|
|
||||||
Course: "Computer Vision",
|
|
||||||
UUID: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Pruefung",
|
|
||||||
Name: "C169 Digitale Bildverarbeitung MIM & INM 3. FS (wpf)",
|
|
||||||
Course: "23INM",
|
|
||||||
UUID: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "C398 Visualisierung in NW und Technik IN-M & MI-M 2. FS (wpf)",
|
|
||||||
Course: "24INM",
|
|
||||||
UUID: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "M947 Fluidenergiemaschinen EGB (pf) & MBB & SGB (wpf) 4.FS",
|
|
||||||
Course: "23EGB-EGTa",
|
|
||||||
UUID: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
want: []model.Event{
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "Computer Vision II",
|
|
||||||
Course: "Computer Vision",
|
|
||||||
UUID: "8ddd913c-27f0-58b2-be17-e50f2851d482",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Pruefung",
|
|
||||||
Name: "C169 Digitale Bildverarbeitung MIM & INM 3. FS (wpf)",
|
|
||||||
Course: "23INM",
|
|
||||||
UUID: "2a35348d-63ce-511c-8580-893321d104b9",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "C398 Visualisierung in NW und Technik IN-M & MI-M 2. FS (wpf)",
|
|
||||||
Course: "24INM",
|
|
||||||
UUID: "6051ebd9-dd2b-5646-82c4-091667f414ee",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
EventType: "Vorlesung",
|
|
||||||
Name: "M947 Fluidenergiemaschinen EGB (pf) & MBB & SGB (wpf) 4.FS",
|
|
||||||
Course: "23EGB-EGTa",
|
|
||||||
UUID: "736764e1-fa78-5195-8280-76c996dc8b47",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
if got := generateUUIDs(tt.args.events); !reflect.DeepEqual(got, tt.want) {
|
|
||||||
t.Errorf("generateUUIDs() = %v, want %v", got, tt.want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
17
services/data-manager/service/functions/event.go
Normal file
17
services/data-manager/service/functions/event.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package functions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"htwkalender/data-manager/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
// generateUUIDs generates a UUID for each event based on the event name, course and semester
|
||||||
|
// the UUID is used to identify the event in the database
|
||||||
|
func GenerateUUIDs(events []model.Event) []model.Event {
|
||||||
|
for i, event := range events {
|
||||||
|
// generate a hash value from the event name, course and semester
|
||||||
|
hash := uuid.NewSHA1(uuid.NameSpaceOID, []byte(event.Name+event.Course))
|
||||||
|
events[i].UUID = hash.String()
|
||||||
|
}
|
||||||
|
return events
|
||||||
|
}
|
83
services/data-manager/service/functions/event_test.go
Normal file
83
services/data-manager/service/functions/event_test.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package functions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"htwkalender/data-manager/model"
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_generateUUIDs(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
events []model.Event
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want []model.Event
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "generate UUIDs for events",
|
||||||
|
args: args{
|
||||||
|
events: []model.Event{
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "Computer Vision II",
|
||||||
|
Course: "Computer Vision",
|
||||||
|
UUID: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Pruefung",
|
||||||
|
Name: "C169 Digitale Bildverarbeitung MIM & INM 3. FS (wpf)",
|
||||||
|
Course: "23INM",
|
||||||
|
UUID: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "C398 Visualisierung in NW und Technik IN-M & MI-M 2. FS (wpf)",
|
||||||
|
Course: "24INM",
|
||||||
|
UUID: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "M947 Fluidenergiemaschinen EGB (pf) & MBB & SGB (wpf) 4.FS",
|
||||||
|
Course: "23EGB-EGTa",
|
||||||
|
UUID: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: []model.Event{
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "Computer Vision II",
|
||||||
|
Course: "Computer Vision",
|
||||||
|
UUID: "8ddd913c-27f0-58b2-be17-e50f2851d482",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Pruefung",
|
||||||
|
Name: "C169 Digitale Bildverarbeitung MIM & INM 3. FS (wpf)",
|
||||||
|
Course: "23INM",
|
||||||
|
UUID: "2a35348d-63ce-511c-8580-893321d104b9",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "C398 Visualisierung in NW und Technik IN-M & MI-M 2. FS (wpf)",
|
||||||
|
Course: "24INM",
|
||||||
|
UUID: "6051ebd9-dd2b-5646-82c4-091667f414ee",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventType: "Vorlesung",
|
||||||
|
Name: "M947 Fluidenergiemaschinen EGB (pf) & MBB & SGB (wpf) 4.FS",
|
||||||
|
Course: "23EGB-EGTa",
|
||||||
|
UUID: "736764e1-fa78-5195-8280-76c996dc8b47",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := GenerateUUIDs(tt.args.events); !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("generateUUIDs() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user