implement dbhandler package and new test file
This commit is contained in:
@@ -1,170 +1,95 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gitea.tecamino.com/paadi/memberDB/models"
|
||||
)
|
||||
|
||||
func (dh *DatabaseHandler) CreateNewEventTable() error {
|
||||
createTableSQL := `
|
||||
CREATE TABLE IF NOT EXISTS events (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
date TEXT UNIQUE NOT NULL,
|
||||
attendees TEXT NOT NULL,
|
||||
count INTEGER NOT NULL
|
||||
);`
|
||||
|
||||
_, err := dh.database.Exec(createTableSQL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create table: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) StartNewEvent(name string) error {
|
||||
_, err := dh.database.Exec("INSERT INTO events (name, date, attendees, count) VALUES (?, ?, ?, ?)", name, time.Now().Format("2006-01-02 15:04:05"), "[]", 0)
|
||||
return err
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) GetEvent(id int) (attendees []models.Event, err error) {
|
||||
var args any
|
||||
query := `SELECT id, name, date, attendees, count FROM events`
|
||||
|
||||
if id > 0 {
|
||||
query += ` WHERE id = ?`
|
||||
args = id
|
||||
if !dh.DatabaseOpened() {
|
||||
return errors.New("database not opened")
|
||||
}
|
||||
|
||||
rows, err := dh.database.Query(query, args)
|
||||
return dh.database.AddNewColum(&models.Event{
|
||||
Name: name,
|
||||
Date: time.Now().Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) GetEvent(id uint) (attendees []models.Event, err error) {
|
||||
if !dh.DatabaseOpened() {
|
||||
return attendees, errors.New("database not opened")
|
||||
}
|
||||
|
||||
err = dh.database.GetById(&attendees, id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var id, count int
|
||||
var name, date, attendance string
|
||||
if err = rows.Scan(&id, &name, &date, &attendance, &count); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var a []models.Person
|
||||
|
||||
if err := json.Unmarshal([]byte(attendance), &a); err != nil {
|
||||
return attendees, err
|
||||
}
|
||||
|
||||
attendees = append(attendees, models.Event{
|
||||
Id: id,
|
||||
Name: name,
|
||||
Date: date,
|
||||
Attendees: a,
|
||||
Count: count,
|
||||
})
|
||||
for i := range attendees {
|
||||
attendees[i].Count = len(attendees[i].Attendees)
|
||||
}
|
||||
|
||||
return attendees, nil
|
||||
return
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) DeleteEvent(ids ...int) error {
|
||||
func (dh *DatabaseHandler) DeleteEvent(ids ...uint) error {
|
||||
if !dh.DatabaseOpened() {
|
||||
return errors.New("database not opened")
|
||||
}
|
||||
|
||||
if len(ids) == 0 {
|
||||
return errors.New("no ids given to be deleted")
|
||||
}
|
||||
|
||||
placeholders := make([]string, len(ids))
|
||||
args := make([]any, len(ids))
|
||||
for i, id := range ids {
|
||||
placeholders[i] = "?"
|
||||
args[i] = id
|
||||
}
|
||||
query := fmt.Sprintf("DELETE FROM events WHERE id IN (%s)", strings.Join(placeholders, ","))
|
||||
|
||||
_, err := dh.database.Exec(query, args...)
|
||||
return err
|
||||
return dh.database.DeleteById(&models.Event{}, ids...)
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) AddAttendeesToEvent(event models.Event) error {
|
||||
|
||||
//get event from database by id
|
||||
row := dh.database.QueryRow(`SELECT attendees FROM events WHERE id = ?`, event.Id)
|
||||
|
||||
var attendeesString string
|
||||
if err := row.Scan(&attendeesString); err != nil {
|
||||
return err
|
||||
func (dh *DatabaseHandler) AddAttendeesToEvent(newEvent models.Event) error {
|
||||
if !dh.DatabaseOpened() {
|
||||
return errors.New("database not opened")
|
||||
}
|
||||
fmt.Println(attendeesString)
|
||||
|
||||
var attendees []models.Person
|
||||
err := json.Unmarshal([]byte(attendeesString), &attendees)
|
||||
var event models.Event
|
||||
err := dh.database.GetById(&event, uint(event.Id))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
next:
|
||||
for _, newAttendee := range event.Attendees {
|
||||
for _, attendee := range attendees {
|
||||
for _, newAttendee := range newEvent.Attendees {
|
||||
for _, attendee := range event.Attendees {
|
||||
if attendee.FirstName == newAttendee.FirstName && attendee.LastName == newAttendee.LastName {
|
||||
continue next
|
||||
}
|
||||
}
|
||||
attendees = append(attendees, newAttendee)
|
||||
event.Attendees = append(event.Attendees, newAttendee)
|
||||
}
|
||||
|
||||
attendeesByte, err := json.Marshal(attendees)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
event.Count = len(event.Attendees)
|
||||
|
||||
count := len(attendees)
|
||||
_, err = dh.database.Exec("UPDATE events SET attendees= ? count= ? WHERE id= ?", string(attendeesByte), event.Id, count)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return dh.database.UpdateValuesById(&event, uint(event.Id))
|
||||
}
|
||||
|
||||
func (dh *DatabaseHandler) DeleteAttendeesFromEvent(event models.Event) error {
|
||||
//get event from database by id
|
||||
row := dh.database.QueryRow(`SELECT attendees FROM events WHERE id = ?`, event.Id)
|
||||
|
||||
var attendeesString string
|
||||
if err := row.Scan(&attendeesString); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println(attendeesString)
|
||||
|
||||
var attendees []models.Person
|
||||
err := json.Unmarshal([]byte(attendeesString), &attendees)
|
||||
if err != nil {
|
||||
return err
|
||||
func (dh *DatabaseHandler) DeleteAttendeesFromEvent(newEvent models.Event) error {
|
||||
if !dh.DatabaseOpened() {
|
||||
return errors.New("database not opened")
|
||||
}
|
||||
|
||||
for _, newAttendee := range event.Attendees {
|
||||
for i, attendee := range attendees {
|
||||
if attendee.FirstName == newAttendee.FirstName && attendee.LastName == newAttendee.LastName {
|
||||
attendees = slices.Delete(attendees, i, i+1)
|
||||
var event models.Event
|
||||
dh.database.GetById(&event, uint(event.Id))
|
||||
|
||||
next:
|
||||
for _, newAttendee := range newEvent.Attendees {
|
||||
for i := range event.Attendees {
|
||||
if event.Attendees[i].FirstName == newAttendee.FirstName && event.Attendees[i].LastName == newAttendee.LastName {
|
||||
event.Attendees = slices.Delete(event.Attendees, i, i+1)
|
||||
continue next
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
attendeesByte, err := json.Marshal(attendees)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
count := len(attendees)
|
||||
_, err = dh.database.Exec("UPDATE events SET attendees= ? count= ? WHERE id= ?", string(attendeesByte), event.Id, count)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
event.Count = len(event.Attendees)
|
||||
return dh.database.UpdateValuesById(&event, uint(event.Id))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user