120 lines
2.4 KiB
Go
120 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
func GetScheduleItems(db *gorm.DB, fromDate time.Time, toDate time.Time) ([]ScheduleItem, error) {
|
|
var items []ScheduleItem
|
|
res := db.Preload("Tags").Where("date BETWEEN ? AND ?", fromDate.Format(time.DateOnly), toDate.Format(time.DateOnly)).Find(&items)
|
|
return items, res.Error
|
|
}
|
|
|
|
func GetScheduleItem(db *gorm.DB, id int) (*ScheduleItem, error) {
|
|
var item ScheduleItem
|
|
res := db.Preload("Tags").First(&item, id)
|
|
|
|
if res.RowsAffected < 1 {
|
|
return nil, nil
|
|
}
|
|
|
|
return &item, res.Error
|
|
}
|
|
|
|
func DeleteScheduleItem(db *gorm.DB, id int) (bool, error) {
|
|
res := db.Delete(&ScheduleItem{}, id)
|
|
|
|
if res.Error != nil {
|
|
return false, res.Error
|
|
}
|
|
|
|
if res.RowsAffected < 1 {
|
|
return false, nil
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func CreateScheduleItem(db *gorm.DB, name string, description *string, duration Duration, date time.Time, tagNames []string) (ScheduleItem, error) {
|
|
var tags = []ScheduleTag{}
|
|
var err error
|
|
|
|
if len(tagNames) > 0 {
|
|
tags, err = UpsertScheduleTags(db, tagNames)
|
|
if err != nil {
|
|
return ScheduleItem{}, err
|
|
}
|
|
}
|
|
|
|
item := ScheduleItem{
|
|
Name: name,
|
|
Description: description,
|
|
Duration: duration,
|
|
Date: date,
|
|
Tags: tags,
|
|
}
|
|
|
|
res := db.Create(&item)
|
|
|
|
return item, res.Error
|
|
}
|
|
|
|
func GetScheduleTags(db *gorm.DB) ([]ScheduleTag, error) {
|
|
var tags []ScheduleTag
|
|
res := db.Find(&tags)
|
|
return tags, res.Error
|
|
}
|
|
|
|
func GetScheduleTag(db *gorm.DB, id int) (*ScheduleTag, error) {
|
|
var tag ScheduleTag
|
|
res := db.First(&tag, id)
|
|
|
|
if res.RowsAffected < 1 {
|
|
return nil, nil
|
|
}
|
|
|
|
return &tag, res.Error
|
|
}
|
|
|
|
func DeleteScheduleTag(db *gorm.DB, id int) (bool, error) {
|
|
res := db.Delete(&ScheduleTag{}, id)
|
|
|
|
if res.Error != nil {
|
|
return false, res.Error
|
|
}
|
|
|
|
if res.RowsAffected < 1 {
|
|
return false, nil
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func CreateScheduleTag(db *gorm.DB, name string) (ScheduleTag, error) {
|
|
tag := ScheduleTag{
|
|
Name: name,
|
|
}
|
|
|
|
res := db.Create(&tag)
|
|
|
|
return tag, res.Error
|
|
}
|
|
|
|
func UpsertScheduleTags(db *gorm.DB, names []string) ([]ScheduleTag, error) {
|
|
var tags = []ScheduleTag{}
|
|
|
|
for _, name := range names {
|
|
tags = append(tags, ScheduleTag{Name: name})
|
|
}
|
|
|
|
res := db.Clauses(clause.OnConflict{DoNothing: true}).Create(&tags)
|
|
return tags, res.Error
|
|
}
|
|
|
|
func Cleanup(db *gorm.DB) error {
|
|
res := db.Exec("select * from schedule_tags where id not in (select schedule_tag_id from schedule_item_tags);")
|
|
return res.Error
|
|
}
|