feat:#31 updated database start end to date

This commit is contained in:
masterelmar
2023-10-28 11:10:06 +02:00
parent d10343fe89
commit 7228d17d84
7 changed files with 667 additions and 33 deletions

View File

@@ -4,7 +4,8 @@ import "time"
func GetDateFromWeekNumber(year int, weekNumber int, dayName string) (time.Time, error) {
// Create a time.Date for the first day of the year
firstDayOfYear := time.Date(year, time.January, 1, 0, 0, 0, 0, time.UTC)
europeTime, _ := time.LoadLocation("Europe/Berlin")
firstDayOfYear := time.Date(year, time.January, 1, 0, 0, 0, 0, europeTime)
// Calculate the number of days to add to reach the desired week
daysToAdd := time.Duration((weekNumber-1)*7) * 24 * time.Hour

View File

@@ -129,22 +129,21 @@ func convertWeeksToDates(events []model.Event, semester string, year string) []m
start := addTimeToDate(eventDay, event.Start)
end := addTimeToDate(eventDay, event.End)
newEvent := event
newEvent.Start = start.String()
newEvent.End = end.String()
newEvent.Start = start
newEvent.End = end
newEvent.Semester = semester
newEvents = append(newEvents, newEvent)
}
return newEvents
}
func addTimeToDate(date time.Time, timeString string) time.Time {
europeTime, _ := time.LoadLocation("Europe/Berlin")
//convert time functions to time
timeParts := strings.Split(timeString, ":")
hour, _ := strconv.Atoi(timeParts[0])
minute, _ := strconv.Atoi(timeParts[1])
return time.Date(date.Year(), date.Month(), date.Day(), hour, minute, 0, 0, europeTime)
// addTimeToDate adds each value onto date
func addTimeToDate(date time.Time, addDate time.Time) time.Time {
newDate := date
newDate = newDate.Add(time.Second * time.Duration(addDate.Second()))
newDate = newDate.Add(time.Hour * time.Duration(addDate.Hour()))
newDate = newDate.Add(time.Minute * time.Duration(addDate.Minute()))
return newDate
}
func extractSemesterAndYear(semesterString string) (string, string) {
@@ -191,8 +190,8 @@ func toEvents(tables [][]*html.Node, days []string) []model.Event {
events = append(events, model.Event{
Day: days[table],
Week: getTextContent(tableData[0]),
Start: getTextContent(tableData[1]),
End: getTextContent(tableData[2]),
Start: createTimeFromHourAndMinuteString(getTextContent(tableData[1])),
End: createTimeFromHourAndMinuteString(getTextContent(tableData[2])),
Name: getTextContent(tableData[3]),
EventType: getTextContent(tableData[4]),
Prof: getTextContent(tableData[5]),
@@ -208,6 +207,17 @@ func toEvents(tables [][]*html.Node, days []string) []model.Event {
return events
}
// createEventFromTableData should create an event from the table data
// tableTime represents Hour and Minute like HH:MM
// tableDate returns a Time
func createTimeFromHourAndMinuteString(tableTime string) time.Time {
europeTime, _ := time.LoadLocation("Europe/Berlin")
timeParts := strings.Split(tableTime, ":")
hour, _ := strconv.Atoi(timeParts[0])
minute, _ := strconv.Atoi(timeParts[1])
return time.Date(0, 0, 0, hour, minute, 0, 0, europeTime)
}
func splitEventsByWeek(events []model.Event) []model.Event {
var newEvents []model.Event

View File

@@ -4,6 +4,7 @@ import (
"htwkalender/model"
"reflect"
"testing"
"time"
)
func Test_extractSemesterAndYear(t *testing.T) {
@@ -172,3 +173,97 @@ func Test_generateUUIDs(t *testing.T) {
})
}
}
func Test_createTimeFromHourAndMinuteString(t *testing.T) {
europeTime, _ := time.LoadLocation("Europe/Berlin")
type args struct {
tableTime string
}
tests := []struct {
name string
args args
want time.Time
}{
{
name: "Test 1",
args: args{
tableTime: "08:00",
},
want: time.Date(0, 0, 0, 8, 0, 0, 0, europeTime),
},
{
name: "Test 2",
args: args{
tableTime: "08:15",
},
want: time.Date(0, 0, 0, 8, 15, 0, 0, europeTime),
},
{
name: "Test 3",
args: args{
tableTime: "08:30",
},
want: time.Date(0, 0, 0, 8, 30, 0, 0, europeTime),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := createTimeFromHourAndMinuteString(tt.args.tableTime); !reflect.DeepEqual(got, tt.want) {
t.Errorf("createTimeFromHourAndMinuteString() = %v, want %v", got, tt.want)
}
})
}
}
func Test_addTimeToDate(t *testing.T) {
europeTime, _ := time.LoadLocation("Europe/Berlin")
type args struct {
date time.Time
time time.Time
}
tests := []struct {
name string
args args
want time.Time
}{
{
name: "Test 1",
args: args{
date: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
time: time.Date(0, 0, 0, 8, 0, 0, 0, time.UTC),
},
want: time.Date(2021, 1, 1, 8, 0, 0, 0, time.UTC),
},
{
name: "Test 2",
args: args{
date: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
time: time.Date(0, 0, 0, 8, 15, 0, 0, time.UTC),
},
want: time.Date(2021, 1, 1, 8, 15, 0, 0, time.UTC),
},
{
name: "Test 3",
args: args{
date: time.Date(2002, 12, 31, 17, 0, 0, 0, time.UTC),
time: time.Date(0, 0, 0, 8, 0, 0, 0, time.UTC),
},
want: time.Date(2003, 1, 1, 1, 0, 0, 0, time.UTC),
},
{
name: "Test 4",
args: args{
date: time.Date(2023, 10, 29, 0, 0, 0, 0, europeTime),
time: time.Date(0, 0, 0, 10, 0, 0, 0, time.UTC),
},
want: time.Date(2023, 10, 29, 9, 0, 0, 0, europeTime),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := addTimeToDate(tt.args.date, tt.args.time); !reflect.DeepEqual(got, tt.want) {
t.Errorf("addTimeToDate() = %v, want %v", got, tt.want)
}
})
}
}

View File

@@ -4,10 +4,9 @@ import (
"github.com/jordic/goics"
"htwkalender/model"
"htwkalender/service/functions"
"time"
)
// local type for EmitICal function
// IcalModel local type for EmitICal function
type IcalModel struct {
Events model.Events
Mapping []model.FeedCollection
@@ -15,7 +14,6 @@ type IcalModel struct {
// EmitICal implements the interface for goics
func (icalModel IcalModel) EmitICal() goics.Componenter {
layout := "2006-01-02 15:04:05 -0700 MST"
c := goics.NewComponent()
c.SetType("VCALENDAR")
c.AddProperty("VERSION", "2.0")
@@ -27,11 +25,9 @@ func (icalModel IcalModel) EmitICal() goics.Componenter {
for _, event := range icalModel.Events {
s := goics.NewComponent()
s.SetType("VEVENT")
timeEnd, _ := time.Parse(layout, event.End)
timeStart, _ := time.Parse(layout, event.Start)
k, v := goics.FormatDateTime("DTEND;TZID=Europe/Berlin", timeEnd)
k, v := goics.FormatDateTime("DTEND;TZID=Europe/Berlin", event.End)
s.AddProperty(k, v)
k, v = goics.FormatDateTime("DTSTART;TZID=Europe/Berlin", timeStart)
k, v = goics.FormatDateTime("DTSTART;TZID=Europe/Berlin", event.Start)
s.AddProperty(k, v)
s.AddProperty("SUMMARY", replaceNameIfUserDefined(event.Name, icalModel.Mapping))
s.AddProperty("DESCRIPTION", generateDescription(event))