102 lines
3 KiB
Go
102 lines
3 KiB
Go
package postgres
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"gitlab.mareshq.com/hq/backoffice/backoffice-api/pkg/training"
|
|
)
|
|
|
|
type AttendeeRepository struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewAttendeeRepository(db *sql.DB) *AttendeeRepository {
|
|
return &AttendeeRepository{db: db}
|
|
}
|
|
|
|
func (r *AttendeeRepository) Find(id training.AttendeeID) (*training.Attendee, error) {
|
|
var a training.Attendee
|
|
err := r.db.QueryRow("SELECT * FROM attendee WHERE id = $1", id).Scan(&a.ID, &a.Name, &a.DateID, &a.Email, &a.Company, &a.Role, &a.IsStudent, &a.HasAttended, &a.HasPaid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &a, nil
|
|
}
|
|
|
|
func (r *AttendeeRepository) FindAll() ([]training.Attendee, error) {
|
|
rows, err := r.db.Query("SELECT * FROM attendee")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var attendees []training.Attendee
|
|
for rows.Next() {
|
|
var a training.Attendee
|
|
err := rows.Scan(&a.ID, &a.Name, &a.DateID, &a.Email, &a.Company, &a.Role, &a.IsStudent, &a.HasAttended, &a.HasPaid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
attendees = append(attendees, a)
|
|
}
|
|
|
|
return attendees, nil
|
|
}
|
|
|
|
func (r *AttendeeRepository) FindAllForDate(dateID training.DateID) ([]training.Attendee, error) {
|
|
rows, err := r.db.Query("SELECT * FROM attendee WHERE date_id = $1", dateID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var attendees []training.Attendee
|
|
for rows.Next() {
|
|
var a training.Attendee
|
|
err := rows.Scan(&a.ID, &a.Name, &a.DateID, &a.Email, &a.Company, &a.Role, &a.IsStudent, &a.HasAttended, &a.HasPaid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
attendees = append(attendees, a)
|
|
}
|
|
|
|
return attendees, nil
|
|
}
|
|
|
|
func (r *AttendeeRepository) CountForDate(dateID training.DateID) (int, error) {
|
|
var count int
|
|
err := r.db.QueryRow("SELECT COUNT(*) FROM attendee WHERE date_id = $1", dateID).Scan(&count)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return count, nil
|
|
}
|
|
|
|
func (r *AttendeeRepository) Save(a *training.Attendee) error {
|
|
_, err := r.db.Exec("INSERT INTO attendee (id, date_id, name, email, company, role, is_student, has_attended, has_paid) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", a.ID, a.DateID, a.Name, a.Email, a.Company, a.Role, a.IsStudent, a.HasAttended, a.HasPaid)
|
|
return err
|
|
}
|
|
|
|
func (r *AttendeeRepository) Update(a *training.Attendee) error {
|
|
_, err := r.db.Exec("UPDATE attendee SET name = $1, email = $2, company = $3, role = $4, is_student = $5, has_attended = $6, has_paid = $7 WHERE id = $8", a.Name, a.Email, a.Company, a.Role, a.IsStudent, a.HasAttended, a.HasPaid, a.ID)
|
|
return err
|
|
}
|
|
|
|
func (r *AttendeeRepository) UpdateAttendance(id training.AttendeeID, hasAttended bool) error {
|
|
_, err := r.db.Exec("UPDATE attendee SET has_attended = $1 WHERE id = $2", hasAttended, id)
|
|
return err
|
|
}
|
|
|
|
func (r *AttendeeRepository) UpdatePayment(id training.AttendeeID, hasPaid bool) error {
|
|
_, err := r.db.Exec("UPDATE attendee SET has_paid = $1 WHERE id = $2", hasPaid, id)
|
|
return err
|
|
}
|
|
|
|
func (r *AttendeeRepository) Delete(id training.AttendeeID) error {
|
|
_, err := r.db.Exec("DELETE FROM attendee WHERE id = $1", id)
|
|
return err
|
|
}
|