diff --git a/api/responsibleHandler.go b/api/responsibleHandler.go index 1d94a5b..f4e00e0 100644 --- a/api/responsibleHandler.go +++ b/api/responsibleHandler.go @@ -56,7 +56,7 @@ func (a *APIHandler) GetResponsible(c *gin.Context) { } } - members, err := a.DbHandler.GetResponsible(uint(i)) + responsibles, err := a.DbHandler.GetResponsible(uint(i)) if err != nil { a.logger.Error("GetResponsible", err) c.JSON(http.StatusBadRequest, gin.H{ @@ -64,7 +64,7 @@ func (a *APIHandler) GetResponsible(c *gin.Context) { }) return } - c.JSON(http.StatusOK, members) + c.JSON(http.StatusOK, responsibles) } func (a *APIHandler) DeleteResponsible(c *gin.Context) { diff --git a/go.mod b/go.mod index b758e36..7729034 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module gitea.tecamino.com/paadi/memberDB go 1.24.5 require ( - gitea.tecamino.com/paadi/dbHandler v1.1.6 + gitea.tecamino.com/paadi/dbHandler v1.1.7 gitea.tecamino.com/paadi/tecamino-logger v0.2.1 github.com/gin-contrib/cors v1.7.6 github.com/gin-gonic/gin v1.11.0 diff --git a/go.sum b/go.sum index 09f6e87..e8a3346 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -gitea.tecamino.com/paadi/dbHandler v1.1.6 h1:Mz7ioUmozXx22oV3P7GHsvQn/2QKOjkNyzdptvqbaN8= -gitea.tecamino.com/paadi/dbHandler v1.1.6/go.mod h1:y/xn/POJg1DO++67uKvnO23lJQgh+XFQq7HZCS9Getw= +gitea.tecamino.com/paadi/dbHandler v1.1.7 h1:NqVbxbUwd7EZX6HYntyLYwwPbyTPevOhIBTFqoCVqOU= +gitea.tecamino.com/paadi/dbHandler v1.1.7/go.mod h1:y/xn/POJg1DO++67uKvnO23lJQgh+XFQq7HZCS9Getw= gitea.tecamino.com/paadi/tecamino-logger v0.2.1 h1:sQTBKYPdzn9mmWX2JXZBtGBvNQH7cuXIwsl4TD0aMgE= gitea.tecamino.com/paadi/tecamino-logger v0.2.1/go.mod h1:FkzRTldUBBOd/iy2upycArDftSZ5trbsX5Ira5OzJgM= github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= diff --git a/handlers/events.go b/handlers/events.go index 2c537c2..b9f48a7 100644 --- a/handlers/events.go +++ b/handlers/events.go @@ -12,7 +12,7 @@ func (dh *DatabaseHandler) StartNewEvent(event *models.Event) error { return errors.New("database not opened") } - if dh.database.Exists(&models.Event{}, "", "name", event.Name, false) { + if dh.database.Exists(&models.Event{}, "name", event.Name, false) { return errors.New("event with name: " + event.Name + " exists already") } @@ -26,7 +26,7 @@ func (dh *DatabaseHandler) GetEvent(id uint) (events []models.Event, err error) return events, errors.New("database not opened") } - err = dh.database.GetById(&events, "Attendees", id) + err = dh.database.GetById(&events, id, "Attendees") for i := range events { for j := range events[i].Attendees { @@ -43,7 +43,12 @@ func (dh *DatabaseHandler) UpdateEvent(id int, event models.Event) (err error) { if !dh.DatabaseOpened() { return errors.New("database not opened") } - return dh.database.UpdateValuesById(&event, "", uint(event.Id)) + + event.Day, err = utils.GetDayFromDate(event.Date) + if err != nil { + return err + } + return dh.database.UpdateValuesById(&event, uint(event.Id)) } func (dh *DatabaseHandler) DeleteEvent(ids ...uint) error { @@ -64,14 +69,14 @@ func (dh *DatabaseHandler) AddAttendeesToEvent(newEvent models.Event) error { } var event models.Event - err := dh.database.GetById(&event, "Attendees", uint(newEvent.Id)) + err := dh.database.GetById(&event, uint(newEvent.Id), "Attendees") if err != nil { return err } next: for _, newAttendee := range newEvent.Attendees { - if !dh.database.Exists(&models.Member{}, "", "id", newAttendee.Id, false) { + if !dh.database.Exists(&models.Member{}, "id", newAttendee.Id, false) { continue } for _, attendee := range event.Attendees { @@ -90,7 +95,7 @@ func (dh *DatabaseHandler) DeleteAttendeesFromEvent(newEvent models.Event) error } var event models.Event - dh.database.GetById(&event, "Attendees", uint(newEvent.Id)) + dh.database.GetById(&event, uint(newEvent.Id), "Attendees") for _, newAttendee := range newEvent.Attendees { for _, a := range event.Attendees { diff --git a/handlers/group.go b/handlers/group.go index 20b4981..8e3e0bb 100644 --- a/handlers/group.go +++ b/handlers/group.go @@ -11,7 +11,7 @@ func (dh *DatabaseHandler) NewGroup(group *models.Group) error { return errors.New("database not opened") } - if dh.database.Exists(&models.Group{}, "", "name", group.Name, false) { + if dh.database.Exists(&models.Group{}, "name", group.Name, false) { return errors.New("group with name: " + group.Name + " exists already") } return dh.database.AddNewColum(&group) @@ -22,18 +22,18 @@ func (dh *DatabaseHandler) GetGroup(id uint) (group []models.Group, err error) { return group, errors.New("database not opened") } - err = dh.database.GetById(&group, "", id) + err = dh.database.GetById(&group, id) if err != nil { return } return } -func (dh *DatabaseHandler) UpdateGroup(id int, group models.Group) (err error) { +func (dh *DatabaseHandler) UpdateGroup(id uint, group models.Group) (err error) { if !dh.DatabaseOpened() { return errors.New("database not opened") } - return dh.database.UpdateValuesById(&group, "", uint(group.Id)) + return dh.database.UpdateValuesById(&group, uint(group.Id)) } func (dh *DatabaseHandler) DeleteGroup(ids ...uint) error { diff --git a/handlers/members.go b/handlers/members.go index 1b50a8d..9e1b28d 100644 --- a/handlers/members.go +++ b/handlers/members.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" - "gitea.tecamino.com/paadi/memberDB/crypto" "gitea.tecamino.com/paadi/memberDB/models" "gitea.tecamino.com/paadi/memberDB/utils" ) @@ -66,7 +65,7 @@ func (dh *DatabaseHandler) GetMember(id uint) (members []models.Member, err erro return members, errors.New("database not opened") } - err = dh.database.GetById(&members, "", id) + err = dh.database.GetById(&members, id, "Group", "Responsible", "Responsible.Member", "Events") if err != nil { return } @@ -75,102 +74,38 @@ func (dh *DatabaseHandler) GetMember(id uint) (members []models.Member, err erro if err := members[i].Decrypt(dh.token); err != nil { return members, err } + if members[i].Responsible != nil { + members[i].Responsible.Member.Decrypt(dh.token) + } } return } // UpdateMember updates/overrides all information given meber id -func (dh *DatabaseHandler) UpdateMember(id int, member models.Member) (err error) { +func (dh *DatabaseHandler) UpdateMember(id uint, member models.Member) (err error) { if !dh.DatabaseOpened() { return errors.New("database not opened") } - if member.FirstName != "" { - member.FirstNameHash = dh.hashField(member.FirstName) - member.FirstName, err = crypto.Encrypt(member.FirstName, dh.token) - if err != nil { - return - } - } - - if member.LastName != "" { - member.LastNameHash = dh.hashField(member.LastName) - member.LastName, err = crypto.Encrypt(member.LastName, dh.token) - if err != nil { - return - } - } - //check correct birtday format - if member.Birthday != "" && utils.IsValidBirthday(member.Birthday) { - member.BirthdayHash = dh.hashField(member.BirthdayHash) - member.Birthday, err = crypto.Encrypt(member.Birthday, dh.token) - if err != nil { - return err - } - } else if member.Birthday != "" { + if member.Birthday != "" && !utils.IsValidBirthday(member.Birthday) { return errors.New("incorrect birthday format") } - if member.Address != "" { - member.Address, err = crypto.Encrypt(member.Address, dh.token) - if err != nil { - return err - } - } - - if member.Zip != "" { - member.Zip, err = crypto.Encrypt(member.Zip, dh.token) - if err != nil { - return err - } - } - - if member.Town != "" { - member.Town, err = crypto.Encrypt(member.Town, dh.token) - if err != nil { - return err - } - } - - if member.Phone != "" { - member.Phone, err = crypto.Encrypt(member.Phone, dh.token) - if err != nil { - return err - } - } - //check correct email format - if member.Email != "" && utils.IsValidEmail(member.Email) { - member.Email, err = crypto.Encrypt(member.Email, dh.token) - if err != nil { - return err - } - } else if member.Email != "" { + if member.Email != "" && !utils.IsValidEmail(member.Email) { return errors.New("incorrect email format") } - if member.FirstVisit != "" { - member.FirstVisit, err = crypto.Encrypt(member.FirstVisit, dh.token) - if err != nil { - return err - } + if member.Group != nil { + member.GroupId = &member.Group.Id } - if member.LastVisit != "" { - member.LastVisit, err = crypto.Encrypt(member.LastVisit, dh.token) - if err != nil { - return err - } + if member.Responsible != nil { + member.ResponsibleId = &member.Responsible.Id } - - if member.Comment != "" { - member.Comment, err = crypto.Encrypt(member.Comment, dh.token) - if err != nil { - return err - } - } - return dh.database.UpdateValuesById(&member, "", uint(member.Id)) + member.Encrypt(dh.token) + return dh.database.UpdateValuesById(&member, uint(member.Id), "Group", "Responsible", "Responsible.Member") } // memberExists helper to check wheter member already exists @@ -180,7 +115,7 @@ func (dh *DatabaseHandler) memberExists(checkMember models.Member) (bool, error) } var members []models.Member - if !dh.database.Exists(&members, "", "birthdayHash", dh.hashField(checkMember.Birthday), false) { + if !dh.database.Exists(&members, "birthdayHash", dh.hashField(checkMember.Birthday), false) { return false, nil } diff --git a/handlers/responsible.go b/handlers/responsible.go index 56b8251..f647565 100644 --- a/handlers/responsible.go +++ b/handlers/responsible.go @@ -2,7 +2,6 @@ package handlers import ( "errors" - "fmt" "gitea.tecamino.com/paadi/memberDB/models" ) @@ -14,18 +13,14 @@ func (dh *DatabaseHandler) AddNewResponsible(responsibles ...models.Responsible) next: for _, r := range responsibles { - if r.MemberId == 0 && r.Id != 0 { - r.MemberId = r.Id - r.Id = 0 - } //check if member exists - if !dh.database.Exists(&models.Member{}, "", "id", &r.MemberId, false) { + if !dh.database.Exists(&models.Member{}, "id", &r.MemberId, false) { continue } // check if already exists var oldResponsibles models.Responsibles - err := dh.database.GetById(&oldResponsibles, "Member", 0) + err := dh.database.GetById(&oldResponsibles, 0, "Member") if err != nil { return err } @@ -33,7 +28,7 @@ next: for _, oldR := range oldResponsibles { if oldR.Member == nil { continue - } else if oldR.Member.Id == int(r.MemberId) { + } else if oldR.Member.Id == r.MemberId { continue next } } @@ -52,7 +47,7 @@ func (dh *DatabaseHandler) GetResponsible(id uint) (responsibles models.Responsi return responsibles, errors.New("database not opened") } - err = dh.database.GetById(&responsibles, "Member", id) + err = dh.database.GetById(&responsibles, id, "Member") for i := range responsibles { err := responsibles[i].Member.Decrypt(dh.token) @@ -71,6 +66,5 @@ func (dh *DatabaseHandler) DeleteResponsible(ids ...uint) error { if len(ids) == 0 { return errors.New("no ids given to be deleted") } - fmt.Println(123, ids) return dh.database.DeleteById(&models.Responsible{}, "", ids...) } diff --git a/models/group.go b/models/group.go index f70fe4b..dcb9d9f 100644 --- a/models/group.go +++ b/models/group.go @@ -1,6 +1,6 @@ package models type Group struct { - Id int `gorm:"primaryKey" json:"id"` + Id uint `gorm:"primaryKey" json:"id"` Name string `gorm:"column:name" json:"name"` } diff --git a/models/member.go b/models/member.go index 941c1a2..8defd40 100644 --- a/models/member.go +++ b/models/member.go @@ -6,86 +6,106 @@ import ( ) type Member struct { - Id int `gorm:"primaryKey" json:"id,omitempty"` - FirstName string `gorm:"column:firstName" json:"firstName,omitempty"` - FirstNameHash string `gorm:"column:firstNameHash" json:"-"` - LastName string `gorm:"column:lastName" json:"lastName,omitempty"` - LastNameHash string `gorm:"column:lastNameHash" json:"-"` - Birthday string `gorm:"column:birthday" json:"birthday,omitempty"` - BirthdayHash string `gorm:"column:birthdayHash" json:"-"` - Address string `gorm:"column:address" json:"address,omitempty"` - Zip string `gorm:"column:zip" json:"zip,omitempty"` - Town string `gorm:"column:town" json:"town,omitempty"` - Phone string `gorm:"column:phone" json:"phone,omitempty"` - Email string `gorm:"column:email" json:"email,omitempty"` - FirstVisit string `gorm:"column:firstVisit" json:"firstVisit,omitempty"` - LastVisit string `gorm:"column:lastVisit" json:"lastVisit,omitempty"` - GroupId *int `json:"GroupId,omitempty"` - Group *Group `gorm:"foreignKey:GroupId;constraint:OnDelete:CASCADE;"json:"group,omitempty"` - ResponsibleId *int `json:"ResponsibleId,omitempty"` - Responsible *Member `gorm:"foreignKey:ResponsibleId;constraint:OnDelete:CASCADE;" json:"responsible,omitempty"` - Comment string `gorm:"column:comment" json:"comment,omitempty"` - Events []*Event `gorm:"many2many:member_events;" ` + Id uint `gorm:"primaryKey" json:"id,omitempty"` + FirstName string `gorm:"column:firstName" json:"firstName,omitempty"` + FirstNameHash string `gorm:"column:firstNameHash" json:"-"` + LastName string `gorm:"column:lastName" json:"lastName,omitempty"` + LastNameHash string `gorm:"column:lastNameHash" json:"-"` + Birthday string `gorm:"column:birthday" json:"birthday,omitempty"` + BirthdayHash string `gorm:"column:birthdayHash" json:"-"` + Address string `gorm:"column:address" json:"address,omitempty"` + Zip string `gorm:"column:zip" json:"zip,omitempty"` + Town string `gorm:"column:town" json:"town,omitempty"` + Phone string `gorm:"column:phone" json:"phone,omitempty"` + Email string `gorm:"column:email" json:"email,omitempty"` + FirstVisit string `gorm:"column:firstVisit" json:"firstVisit,omitempty"` + LastVisit string `gorm:"column:lastVisit" json:"lastVisit,omitempty"` + GroupId *uint `json:"GroupId,omitempty"` + Group *Group `gorm:"foreignKey:GroupId;constraint:OnDelete:CASCADE;" json:"group,omitempty"` + ResponsibleId *uint `json:"ResponsibleId,omitempty"` + Responsible *Responsible `gorm:"foreignKey:ResponsibleId;references:Id" json:"responsible,omitempty"` + Comment string `gorm:"column:comment" json:"comment,omitempty"` + Events []*Event `gorm:"many2many:member_events;" ` } func (m *Member) Encrypt(token []byte) (err error) { - - m.FirstNameHash = utils.HashField(m.FirstName, token) - m.FirstName, err = crypto.Encrypt(m.FirstName, token) - if err != nil { - return + if m.FirstName != "" { + m.FirstNameHash = utils.HashField(m.FirstName, token) + m.FirstName, err = crypto.Encrypt(m.FirstName, token) + if err != nil { + return + } + } + if m.LastName != "" { + m.LastNameHash = utils.HashField(m.LastName, token) + m.LastName, err = crypto.Encrypt(m.LastName, token) + if err != nil { + return + } } - m.LastNameHash = utils.HashField(m.LastName, token) - m.LastName, err = crypto.Encrypt(m.LastName, token) - if err != nil { - return + if m.Birthday != "" { + m.BirthdayHash = utils.HashField(m.Birthday, token) + m.Birthday, err = crypto.Encrypt(m.Birthday, token) + if err != nil { + return + } } - m.BirthdayHash = utils.HashField(m.Birthday, token) - m.Birthday, err = crypto.Encrypt(m.Birthday, token) - if err != nil { - return + if m.Address != "" { + m.Address, err = crypto.Encrypt(m.Address, token) + if err != nil { + return + } } - m.Address, err = crypto.Encrypt(m.Address, token) - if err != nil { - return + if m.Zip != "" { + m.Zip, err = crypto.Encrypt(m.Zip, token) + if err != nil { + return + } } - m.Zip, err = crypto.Encrypt(m.Zip, token) - if err != nil { - return + if m.Town != "" { + m.Town, err = crypto.Encrypt(m.Town, token) + if err != nil { + return + } } - m.Town, err = crypto.Encrypt(m.Town, token) - if err != nil { - return + if m.Phone != "" { + m.Phone, err = crypto.Encrypt(m.Phone, token) + if err != nil { + return + } } - m.Phone, err = crypto.Encrypt(m.Phone, token) - if err != nil { - return + if m.Email != "" { + m.Email, err = crypto.Encrypt(m.Email, token) + if err != nil { + return + } } - m.Email, err = crypto.Encrypt(m.Email, token) - if err != nil { - return + if m.FirstVisit != "" { + m.FirstVisit, err = crypto.Encrypt(m.FirstVisit, token) + if err != nil { + return + } } - m.FirstVisit, err = crypto.Encrypt(m.FirstVisit, token) - if err != nil { - return + if m.LastVisit != "" { + m.LastVisit, err = crypto.Encrypt(m.LastVisit, token) + if err != nil { + return + } } - m.LastVisit, err = crypto.Encrypt(m.LastVisit, token) - if err != nil { - return - } - - m.Comment, err = crypto.Encrypt(m.Comment, token) - if err != nil { - return + if m.Comment != "" { + m.Comment, err = crypto.Encrypt(m.Comment, token) + if err != nil { + return + } } return } diff --git a/models/responsible.go b/models/responsible.go index b827535..e3c2bd9 100644 --- a/models/responsible.go +++ b/models/responsible.go @@ -1,8 +1,8 @@ package models type Responsible struct { - Id uint `gorm:"primaryKey" json:"id"` - MemberId uint + Id uint `gorm:"primaryKey" json:"id"` + MemberId uint `json:"memberId"` Member *Member `gorm:"foreignKey:MemberId;constraint:OnDelete:CASCADE;" json:"member"` } diff --git a/utils/utils.go b/utils/utils.go index 0a8a7a5..20f81fc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -38,6 +38,11 @@ func GetCurrentDay(loc *time.Location) string { return fmt.Sprint(time.Now().In(loc).Weekday()) } +func GetDayFromDate(dateTime string) (string, error) { + t, err := time.Parse("2006-01-02 15:04:05", dateTime) + return fmt.Sprint(t.Weekday()), err +} + func HashField(field string, token []byte) string { h := hmac.New(sha256.New, token) h.Write([]byte(field))