update
parent
df63ab8d5e
commit
5c8b5c20d6
|
@ -27,17 +27,22 @@ func ApiEventQuery(c *gin.Context) {
|
||||||
}
|
}
|
||||||
var result *gorm.DB
|
var result *gorm.DB
|
||||||
|
|
||||||
if grp != "" && auth.ACHas(c, auth.ADMIN, auth.SYSTEM, grp) {
|
if grp != "" {
|
||||||
var grp_id uint
|
if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, grp) {
|
||||||
db.Raw("select id from groups where name = ?", grp).Scan(&grp_id)
|
panic(errors.ErrorForbidden)
|
||||||
if grp_id == 0 {
|
|
||||||
panic(errors.ErrorNotFound)
|
|
||||||
}
|
}
|
||||||
result = db.Find(&events, "`group_id` = ? ", grp_id)
|
result = db.Find(&events, `event_group_id in (
|
||||||
|
select id from event_groups where group_id = (
|
||||||
|
select id from groups where name = ?
|
||||||
|
)
|
||||||
|
)`, grp)
|
||||||
} else if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM) {
|
} else if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM) {
|
||||||
result = db.
|
result = db.Find(&events, `event_group_id in (
|
||||||
Find(&events, "`group_id` in (?) or group_id = 0",
|
select eg.id from event_groups eg where eg.group_id in (
|
||||||
db.Table("groups").Select("id").Where("name in ?", cl.Groups))
|
select g.id from groups g where g.name in ?
|
||||||
|
)
|
||||||
|
)`, cl.Groups)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
result = db.Find(&events)
|
result = db.Find(&events)
|
||||||
}
|
}
|
||||||
|
@ -60,15 +65,28 @@ func ApiEventNew(c *gin.Context) {
|
||||||
if e.Start.IsZero() || e.End.IsZero() || e.Start.Before(e.End) {
|
if e.Start.IsZero() || e.End.IsZero() || e.Start.Before(e.End) {
|
||||||
panic(ErrorInvalidTime)
|
panic(ErrorInvalidTime)
|
||||||
}
|
}
|
||||||
if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, e.GroupName) {
|
cal := 0
|
||||||
|
if db.Raw("select count(id) from calendars where id = ?", e.CalendarID).
|
||||||
|
Scan(&cal); cal != 1 {
|
||||||
|
panic(errors.ErrorNotFound)
|
||||||
|
}
|
||||||
|
if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, e.EventGroup.GroupName) {
|
||||||
panic(errors.ErrorForbidden)
|
panic(errors.ErrorForbidden)
|
||||||
}
|
}
|
||||||
if err := db.Create(e).Error; err != nil {
|
if e.EventGroup.Name == "" {
|
||||||
|
e.EventGroup.Name = e.Name
|
||||||
|
}
|
||||||
|
if err := db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if err := tx.Create(e).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
history.Send(history.Info().
|
history.Send(history.Info().
|
||||||
Nm("Create").
|
Nm("Create").
|
||||||
Grp(e.GroupName).Bd(e).
|
Grp(e.EventGroup.GroupName).Bd(e).
|
||||||
Iss(c.GetString(auth.GinUserKey)).
|
Iss(c.GetString(auth.GinUserKey)).
|
||||||
Msg("Event created"))
|
Msg("Event created"))
|
||||||
server.OK(c, e)
|
server.OK(c, e)
|
||||||
|
@ -90,7 +108,7 @@ func ApiEventUpdate(c *gin.Context) {
|
||||||
}
|
}
|
||||||
history.Send(history.Info().
|
history.Send(history.Info().
|
||||||
Nm("Update").
|
Nm("Update").
|
||||||
Grp(e.GroupName).Bd(e).
|
Grp(e.EventGroup.GroupName).Bd(e).
|
||||||
Iss(c.GetString(auth.GinUserKey)).
|
Iss(c.GetString(auth.GinUserKey)).
|
||||||
Msg("Event Updated"))
|
Msg("Event Updated"))
|
||||||
server.OK(c, e)
|
server.OK(c, e)
|
||||||
|
@ -107,13 +125,16 @@ func ApiEventDelete(c *gin.Context) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.Delete(&Calendar{}, "id = ?", id).Error
|
err = db.Delete(e, "id = ?", id).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(errors.NewError(404, err))
|
panic(errors.NewError(404, err))
|
||||||
}
|
}
|
||||||
|
db.Exec(`delete from event_groups where id = ?
|
||||||
|
and 0 = (select count(id) from events where event_group_id = ?)`,
|
||||||
|
e.EventGroupID, e.EventGroupID)
|
||||||
history.Send(history.Info().
|
history.Send(history.Info().
|
||||||
Nm("Delete").
|
Nm("Delete").
|
||||||
Grp(e.GroupName).Bd(e).
|
Grp(e.EventGroup.GroupName).Bd(e).
|
||||||
Iss(c.GetString(auth.GinUserKey)).
|
Iss(c.GetString(auth.GinUserKey)).
|
||||||
Msg("Event Deleted"))
|
Msg("Event Deleted"))
|
||||||
server.OK(c, "ok")
|
server.OK(c, "ok")
|
||||||
|
|
|
@ -14,6 +14,11 @@ var l zerolog.Logger
|
||||||
|
|
||||||
var db *gorm.DB
|
var db *gorm.DB
|
||||||
|
|
||||||
|
var color []string = []string{
|
||||||
|
"red", "pink", "purple", "deep-purple", "indigo", "blue", "light-blue", "cyan", "teal", "green",
|
||||||
|
"light-green", "lime", "yellow", "amber", "orange", "deep-orange", "blue-grey",
|
||||||
|
}
|
||||||
|
|
||||||
type Calendar struct {
|
type Calendar struct {
|
||||||
ID string `gorm:"primaryKey"`
|
ID string `gorm:"primaryKey"`
|
||||||
|
|
||||||
|
@ -63,5 +68,6 @@ func (c *Calendar) AfterFind(tx *gorm.DB) (err error) {
|
||||||
db.Raw("select name from groups where id = ?", c.GroupID).Scan(&name)
|
db.Raw("select name from groups where id = ?", c.GroupID).Scan(&name)
|
||||||
c.GroupName = name
|
c.GroupName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,46 +5,31 @@ import (
|
||||||
|
|
||||||
"github.com/rs/xid"
|
"github.com/rs/xid"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"kumoly.io/kumoly/app/auth"
|
|
||||||
"kumoly.io/kumoly/app/errors"
|
"kumoly.io/kumoly/app/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Event struct {
|
type Event struct {
|
||||||
ID string `gorm:"primaryKey"`
|
ID string `gorm:"primaryKey"`
|
||||||
|
|
||||||
Start time.Time
|
Start time.Time
|
||||||
End time.Time
|
End time.Time
|
||||||
Name string `gorm:"not null"`
|
Name string `gorm:"not null"`
|
||||||
Hosts string
|
|
||||||
Description string
|
|
||||||
Location string
|
|
||||||
|
|
||||||
// ntu
|
Color string `gorm:"-"`
|
||||||
Class string
|
|
||||||
CourseID string
|
IsExt bool
|
||||||
Semester string
|
|
||||||
|
|
||||||
CalendarID string
|
CalendarID string
|
||||||
|
EventGroup EventGroup `json:"Detial"`
|
||||||
EventGroupID string
|
EventGroupID string
|
||||||
|
|
||||||
Group auth.Group `json:"-"`
|
|
||||||
GroupName string `gorm:"-" json:"Group"`
|
|
||||||
GroupID uint `json:"-"`
|
|
||||||
|
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Event) BeforeSave(tx *gorm.DB) (err error) {
|
func (e *Event) BeforeSave(tx *gorm.DB) (err error) {
|
||||||
if e.GroupName != "" {
|
if e.CalendarID == "" {
|
||||||
var grp_id uint
|
return errors.ErrorBadRequest
|
||||||
db.Raw("select id from groups where name = ?", e.GroupName).Scan(&grp_id)
|
|
||||||
if grp_id == 0 {
|
|
||||||
return errors.ErrorNotFound
|
|
||||||
}
|
|
||||||
e.GroupID = grp_id
|
|
||||||
} else {
|
|
||||||
e.GroupID = 0
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -53,14 +38,16 @@ func (e *Event) BeforeCreate(tx *gorm.DB) (err error) {
|
||||||
if e.ID == "" {
|
if e.ID == "" {
|
||||||
e.ID = xid.New().String()
|
e.ID = xid.New().String()
|
||||||
}
|
}
|
||||||
|
e.IsExt = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Event) AfterFind(tx *gorm.DB) (err error) {
|
func (e *Event) AfterFind(tx *gorm.DB) (err error) {
|
||||||
if e.GroupID != 0 {
|
eg := EventGroup{}
|
||||||
var name string
|
if err := tx.First(&eg, "id = ?", e.EventGroupID).Error; err != nil {
|
||||||
db.Raw("select name from groups where id = ?", e.GroupID).Scan(&name)
|
return err
|
||||||
e.GroupName = name
|
|
||||||
}
|
}
|
||||||
|
e.EventGroup = eg
|
||||||
|
e.Color = color[e.EventGroup.Color%len(color)]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,19 @@ type EventGroup struct {
|
||||||
Name string
|
Name string
|
||||||
Rrule string
|
Rrule string
|
||||||
|
|
||||||
Events []Event
|
// event header
|
||||||
|
Hosts string
|
||||||
|
Description string
|
||||||
|
Location string
|
||||||
|
|
||||||
|
// ntu
|
||||||
|
Class string
|
||||||
|
CourseID string
|
||||||
|
Semester string
|
||||||
|
|
||||||
|
// UI
|
||||||
|
Color int
|
||||||
|
// event end
|
||||||
|
|
||||||
Group auth.Group `json:"-"`
|
Group auth.Group `json:"-"`
|
||||||
GroupName string `gorm:"-" json:"Group"`
|
GroupName string `gorm:"-" json:"Group"`
|
||||||
|
@ -36,6 +48,8 @@ func (eg *EventGroup) BeforeSave(tx *gorm.DB) (err error) {
|
||||||
} else {
|
} else {
|
||||||
eg.GroupID = 0
|
eg.GroupID = 0
|
||||||
}
|
}
|
||||||
|
eg.Color = GetNewColor(eg.GroupName)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
func (eg *EventGroup) BeforeCreate(tx *gorm.DB) (err error) {
|
func (eg *EventGroup) BeforeCreate(tx *gorm.DB) (err error) {
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package calendar
|
package calendar
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"time"
|
||||||
|
|
||||||
"kumoly.io/kumoly/app/server"
|
"kumoly.io/kumoly/app/server"
|
||||||
"kumoly.io/kumoly/app/store"
|
"kumoly.io/kumoly/app/store"
|
||||||
"kumoly.io/kumoly/app/util"
|
"kumoly.io/kumoly/app/util"
|
||||||
|
@ -16,6 +19,7 @@ func (srv Service) Del() {}
|
||||||
func (srv Service) Health() error { return nil }
|
func (srv Service) Health() error { return nil }
|
||||||
|
|
||||||
func (srv Service) Init() error {
|
func (srv Service) Init() error {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
db = store.DB
|
db = store.DB
|
||||||
|
|
||||||
l = util.Klog.With().Str("mod", "auth").Logger()
|
l = util.Klog.With().Str("mod", "auth").Logger()
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package calendar
|
package calendar
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/rand"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"kumoly.io/kumoly/app/auth"
|
"kumoly.io/kumoly/app/auth"
|
||||||
|
@ -26,10 +28,10 @@ func HasEventAccess(c *gin.Context, e *Event, cid string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.NewError(404, err)
|
return errors.NewError(404, err)
|
||||||
}
|
}
|
||||||
if e.GroupName == "" {
|
if e.EventGroup.GroupName == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, e.GroupName) {
|
if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, e.EventGroup.GroupName) {
|
||||||
return errors.ErrorForbidden
|
return errors.ErrorForbidden
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -47,3 +49,13 @@ func ChangeCalGroup(tx *gorm.DB, cal_id, to string) error {
|
||||||
) where calendar_id = ?`, to, cal_id)
|
) where calendar_id = ?`, to, cal_id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetNewColor(GroupName string) int {
|
||||||
|
eg := &EventGroup{}
|
||||||
|
if err := db.Select("color").
|
||||||
|
Where("group_id = (select id from groups where name = ? )", GroupName).
|
||||||
|
Last(eg).Error; err != nil {
|
||||||
|
return rand.Intn(len(color))
|
||||||
|
}
|
||||||
|
return eg.Color + 1
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue